отправка ARP ответа во FreeBSD, 3bepb, 21-Авг-03, 05:42 [смотреть все]люди в программировании я новичёк и вот я написал программку посылающая ARP ответ #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <netdb.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <string.h> #include <net/if_arp.h> #include <net/ethernet.h> #include <netinet/if_ether.h> #include <netinet/in_systm.h> #include <netinet/ip.h> #include <netinet/tcp.h> #include <string.h> #include <net/if_arp.h> #define ETH_HW_ADDR_LEN 6 #define IP_ADDR_LEN 4 #define ARP_FRAME_TYPE 0x0806 #define ETHER_HW_TYPE 1 #define IP_PROTO_TYPE 0x0800 #define OP_ARP_REQUEST 2 #define DEVICE "rl0" struct arphdra { u_short ar_hrd; u_short ar_pro; u_char ar_hln; u_char ar_pln; u_short ar_op; u_char ar_sha[6]; u_char ar_spa[4]; u_char ar_tha[6]; u_char ar_tpa[4]; }; int main (int argc, char **argv) { struct arphdra arp; struct in_addr src , dst; struct sockaddr sos; u_char *packet; int sock; int send; if (argc != 5) { printf("ips hws ipd hwd\n"); } packet = (char *)malloc(sizeof(struct arphdra)); sos.sa_family = PF_INET; strcpy(sos.sa_data,DEVICE); sock = socket(AF_INET,SOCK_RAW,IPPROTO_RAW); if (sock < 0) { printf("socket\n"); } inet_aton(argv[1],&src); inet_aton(argv[3],&dst); arp.ar_hrd = htons(ETHER_HW_TYPE); arp.ar_pro = htons(IP_PROTO_TYPE); arp.ar_hln = htons(ETH_HW_ADDR_LEN); arp.ar_pln = htons(IP_ADDR_LEN); arp.ar_op = htons(OP_ARP_REQUEST); memcpy(arp.ar_tha,&src,IP_ADDR_LEN); memcpy(arp.ar_sha,argv[2],ETH_HW_ADDR_LEN); memcpy(arp.ar_tha,&dst,IP_ADDR_LEN); memcpy(arp.ar_sha,argv[4],ETH_HW_ADDR_LEN); send = sendto(sock,&packet,sizeof(packet),0,&sos,sizeof(sos)); if (send < 0) { printf("sendto error\n"); } } не судите строга за такой примитивный у меня вылетает ошибка sendto при отправке и вот вопрос такли я пакет составил надо ли ip загодовак хотя по rfc вроде не требуется и тули структуру sockaddr я использовал для отправки заранее спасибо и ещё раз не судите строго |
- отправка ARP ответа во FreeBSD, 3bepb, 10:35 , 21-Авг-03 (1)
уточнение вместо sockaddr нужно использовать aockaddr_in это я понял но в арп таблице ай пи появляется а физический адрес нет может я не соблюдаю порядок байт подскажите пожалуйста
- отправка ARP ответа во FreeBSD, dmitry, 11:00 , 21-Авг-03 (2)
>уточнение >вместо sockaddr нужно использовать aockaddr_in это я понял >но в арп таблице ай пи появляется а физический адрес нет >может я не соблюдаю порядок байт подскажите пожалуйста арп заголовок у тебя заполняется, тока я не вижу чтоб он отправлялся.
WBR, Dvorkin
- отправка ARP ответа во FreeBSD, 3bepb, 06:27 , 22-Авг-03 (3)
спасибо это я исправлю (sendto(sock,&arp,...) но у меня возник ещё один вопрос правильно ли я физический адрес записываю в структуру? заранее благодарен всем ответившим
- отправка ARP ответа во FreeBSD, Dvorkin, 12:52 , 22-Авг-03 (4)
>спасибо это я исправлю (sendto(sock,&arp,...) но у меня возник ещё один вопрос >правильно ли я физический адрес записываю в структуру? >заранее благодарен всем ответившим лично я сам на свои вопросы отвечал tcpdump'ом. :) я тоже недавно делал нечто подобное, но с RARP. Мне пришлось делать не SOCK_RAW, а SOCK_PACKET, чтобы полностью заполнять link-level headers. могу кинуть сорец на мыло. но уже тока в понедельник. WBR, Dvorkin
- отправка ARP ответа во FreeBSD, 3bepb, 06:16 , 23-Авг-03 (5)
я на досуге поразмышлял посмотрел в свой исходник и у меня возник вопрос сокет мы объявили всё сделано правильно НО ядро всё равно добавляет в пакет айпи заголовок если кто знает как это обойти скажите я пробовал добавлять setsockopt но пакет вообще не отправляется если не сложно кинь сырец на мыло в понедельник тока я не знаю будет ли sock_packet работать во фряхе я скока не искал библиотек не нашёл заранее спасибо
- отправка ARP ответа во FreeBSD, genie, 01:37 , 25-Авг-03 (6)
Ispol'zui HDRINCL option - eto otuchit ego IP zagolovok dobavlyat'. >я на досуге поразмышлял посмотрел в свой исходник и у меня возник >вопрос сокет мы объявили всё сделано правильно НО ядро всё равно >добавляет в пакет айпи заголовок если кто знает как это обойти >скажите я пробовал добавлять setsockopt >но пакет вообще не отправляется если не сложно кинь сырец на мыло >в понедельник >тока я не знаю будет ли sock_packet работать во фряхе я скока >не искал библиотек не нашёл заранее спасибо
- отправка ARP ответа во FreeBSD, 3bepb, 05:56 , 25-Авг-03 (7)
блин не работае добавляю я перед sendto if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, (char *) &on, sizeof (on))== -1){perror ("setsockopt");exit (1);} вроде так должно быть но пакет всё павно не отправляется ругается sendto может я делаю что то не правильно???
|