The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
отправка 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
                может я делаю что то не правильно???



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру