The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"отправка ARP ответа во FreeBSD"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"отправка ARP ответа во FreeBSD"
Сообщение от 3bepb emailИскать по авторуВ закладки on 21-Авг-03, 05:42  (MSK)
люди в программировании я новичёк и вот я написал программку посылающая 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 я использовал для отправки
заранее спасибо и ещё раз не судите строго
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "отправка ARP ответа во FreeBSD"
Сообщение от 3bepb emailИскать по авторуВ закладки on 21-Авг-03, 10:35  (MSK)
уточнение
вместо sockaddr нужно использовать aockaddr_in это я понял
но в арп таблице ай пи появляется а физический адрес нет
может я не соблюдаю порядок байт подскажите пожалуйста
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "отправка ARP ответа во FreeBSD"
Сообщение от dmitry emailИскать по авторуВ закладки on 21-Авг-03, 11:00  (MSK)
>уточнение
>вместо sockaddr нужно использовать aockaddr_in это я понял
>но в арп таблице ай пи появляется а физический адрес нет
>может я не соблюдаю порядок байт подскажите пожалуйста


арп заголовок у тебя заполняется, тока я не вижу чтоб он отправлялся.

WBR, Dvorkin

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "отправка ARP ответа во FreeBSD"
Сообщение от 3bepb emailИскать по авторуВ закладки on 22-Авг-03, 06:27  (MSK)
спасибо это я исправлю (sendto(sock,&arp,...) но у меня возник ещё один вопрос правильно ли я физический адрес записываю в структуру?
заранее благодарен всем ответившим
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "отправка ARP ответа во FreeBSD"
Сообщение от Dvorkin emailИскать по авторуВ закладки on 22-Авг-03, 12:52  (MSK)
>спасибо это я исправлю (sendto(sock,&arp,...) но у меня возник ещё один вопрос
>правильно ли я физический адрес записываю в структуру?
>заранее благодарен всем ответившим

лично я сам на свои вопросы отвечал tcpdump'ом. :)
я тоже недавно делал нечто подобное, но с RARP.
Мне пришлось делать не SOCK_RAW, а SOCK_PACKET, чтобы полностью заполнять link-level headers. могу кинуть сорец на мыло. но уже тока в понедельник.

WBR, Dvorkin

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "отправка ARP ответа во FreeBSD"
Сообщение от 3bepb emailИскать по авторуВ закладки on 23-Авг-03, 06:16  (MSK)
я на досуге поразмышлял посмотрел в свой исходник и у меня возник вопрос сокет мы объявили всё сделано правильно НО ядро всё равно добавляет в пакет айпи заголовок если кто знает как это обойти скажите я пробовал добавлять setsockopt
но пакет вообще не отправляется если не сложно кинь сырец на мыло в понедельник
тока я не знаю будет ли sock_packet работать во фряхе я скока не искал библиотек не нашёл заранее спасибо
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "отправка ARP ответа во FreeBSD"
Сообщение от genie Искать по авторуВ закладки on 25-Авг-03, 01:37  (MSK)
Ispol'zui HDRINCL option - eto otuchit ego IP zagolovok dobavlyat'.


>я на досуге поразмышлял посмотрел в свой исходник и у меня возник
>вопрос сокет мы объявили всё сделано правильно НО ядро всё равно
>добавляет в пакет айпи заголовок если кто знает как это обойти
>скажите я пробовал добавлять setsockopt
>но пакет вообще не отправляется если не сложно кинь сырец на мыло
>в понедельник
>тока я не знаю будет ли sock_packet работать во фряхе я скока
>не искал библиотек не нашёл заранее спасибо


  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "отправка ARP ответа во FreeBSD"
Сообщение от 3bepb emailИскать по авторуВ закладки on 25-Авг-03, 05:56  (MSK)
блин не работае добавляю я перед sendto
if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, (char *) &on, sizeof
        (on))== -1){perror ("setsockopt");exit (1);}
вроде так должно быть но пакет всё павно не отправляется ругается sendto
может я делаю что то не правильно???
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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