Linux - статьи




Реализация сети в операционной - часть 15


........................................

===========end======================

теперь нам надо перехватить отправку пакета

идем в файл net/ipv4/ip_output.c и после всех строк где есть 'iph->saddr=' вставляем наш код

#ifdef CONFIG_HACKIP if((sk->hackf.src_addr!=0)&&(sk->hackflag==1)) { iph->saddr=sk->hackf.src_addr;

printk("HACKIP:ip_build_and_send.. %d\n",iph->saddr); }

#endif

Осталось малое: в файл include/linux/in.h добавляем строку #define IP_HACKIP 16

в файл net/Config.in

bool 'HACKIP facilities' CONFIG_HACKIP

делаем cd /usr/src/linux make menuconfig make dep make bzImage cp arh/i386/boot/bzImage /boot/kursach

правим lilo.conf или /boot/grub/menu.lst соответствуюшая команда reboot....

теперь протестируем нашу программу извиняюсь за возможное наличие лишних include просто я переделал файл из друго-го проекта

============rel.c======================== /* Written by Gleb Paharenko <gleb@ptf.kiev.ua> 2003 */ /*Посвящяется Кевину Митнику */ /*и прекрасной весне в мае 2003-го*/

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/socket.h> #include<resolv.h> #include<arpa/inet.h> #include<errno.h> #include<string.h> #include<linux/ip.h> #define IP_HACKIP 16

int main() { int sd,res; int value=1; int sval=0; int oval=1; char buffer[100]; struct sockaddr_in addr,raddr; bzero(buffer,sizeof(buffer)); if((sd=socket(PF_INET,SOCK_RAW,6))<0) { perror("Socket"); exit(errno); } bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; raddr.sin_family=AF_INET; addr.sin_port=0; raddr.sin_port=0; inet_aton("212.168.1.11",(struct sockaddr *)&(addr.sin_addr)); inet_aton("192.168.1.1",(struct sockaddr *)&(raddr.sin_addr)); sval=addr.sin_addr.s_addr; inet_aton("192.168.1.10",(struct sockaddr *)&(addr.sin_addr));

  if(bind(sd,(struct sockaddr *)&addr,sizeof(addr))<0) { perror("bind"); exit(errno); } if(connect(sd,(struct sockaddr *)&raddr,sizeof(raddr))!=0){ perror("connect");exit(errno);}




Содержание  Назад  Вперед