The OpenNET Project / Index page

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

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

"ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от alx (??) on 26-Мрт-06, 16:19 
Здравствуйте. Кто-нибудь сталкивался с такой проблемой:
Создается сокет: rs=socket(PF_INET,SOCK_RAW,0)
В него высылаются данные: i=sendto(rs,ptr,iphlen,0,(struct sockaddr *)&dest,destlen)
ВСЕ РАБОТАЕТ! И, естественно, добавляется IP header.
Нужно создать свой IP header,
НО, как только выставляется опция: setsockopt(rs,IPPROTO_IP,IP_HDRINCL,&op,sizeof(op))
ТО вызов sendto возвращает ошибку Invalid argument.
Я убил на это уже три дня! Ничего не помогает. Мой IP header:
  bzero(&iph,iphlen);
    iph.v_hl = 0x45;
    iph.tos  = 0x00;
    iph.tlen = htons(0x0014);        
    iph.trid = htons(0x0000);        
    iph.offs = htons(0x0000);        
    iph.ttl  = 0x40;
    iph.prot = 0x00;
    iph.csum = htons(0x0000);    /* пытался выставлять! */        
    iph.sadr = htonl(src_addr);  /* равен IP системы */        
    iph.dadr = htonl(dst_addr);     /* равен указанному в (struct sockaddr *)&dest    */

Система freeBsd 4.11
Права root (uid=0).

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от chip email(ok) on 26-Мрт-06, 17:20 
>Здравствуйте. Кто-нибудь сталкивался с такой проблемой:
>Создается сокет: rs=socket(PF_INET,SOCK_RAW,0)
>В него высылаются данные: i=sendto(rs,ptr,iphlen,0,(struct sockaddr *)&dest,destlen)
>ВСЕ РАБОТАЕТ! И, естественно, добавляется IP header.
>Нужно создать свой IP header,
>НО, как только выставляется опция: setsockopt(rs,IPPROTO_IP,IP_HDRINCL,&op,sizeof(op))
>ТО вызов sendto возвращает ошибку Invalid argument.
>Я убил на это уже три дня! Ничего не помогает. Мой IP
>header:
>  bzero(&iph,iphlen);
>    iph.v_hl = 0x45;
>    iph.tos  = 0x00;
>    iph.tlen = htons(0x0014);
>    iph.trid = htons(0x0000);
>    iph.offs = htons(0x0000);
>    iph.ttl  = 0x40;
>    iph.prot = 0x00;
>    iph.csum = htons(0x0000);    /* пытался
>выставлять! */
>    iph.sadr = htonl(src_addr);  /* равен IP системы
>*/
>    iph.dadr = htonl(dst_addr);  /* равен указанному в
>(struct sockaddr *)&dest */
>
>Система freeBsd 4.11
>Права root (uid=0).

Сходу не скажу, но попробуй заглянуть в исходники ping : /usr/src/sbin/ping/ping.c .

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от alx (??) on 26-Мрт-06, 17:50 
Может ли такое быть, что моя версия BSD не поддерживает запись IP заголовка?
Если да, то как это проверить?
И еще: Самое странное, что setsockopt(rs,IPPROTO_IP,IP_HDRINCL,&op,sizeof(op))
нормально исполняется - никаких ошибок!
Ошибка возникает при следующем вызове sendto, а если не вызывать setsockopt, то sendto нормально работает с теми же аргументами!
Бред какой-то!
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от alx (??) on 26-Мрт-06, 18:20 

>Сходу не скажу, но попробуй заглянуть в исходники ping : /usr/src/sbin/ping/ping.c .
>
Посмотрел. Не используется IP_HDRINCL в ping. Все выставляется через опции.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от chip email(ok) on 26-Мрт-06, 18:39 
>
>>Сходу не скажу, но попробуй заглянуть в исходники ping : /usr/src/sbin/ping/ping.c .
>>
>Посмотрел. Не используется IP_HDRINCL в ping. Все выставляется через опции.


http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/sbin/ping/ping.c?rev=1.108&content-type=text/plain

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "ошибка RAWсокет + HDRINCL в BSD"  
Сообщение от alx (??) on 26-Мрт-06, 22:15 
>>
>>>Сходу не скажу, но попробуй заглянуть в исходники ping : /usr/src/sbin/ping/ping.c .
>>>
>>Посмотрел. Не используется IP_HDRINCL в ping. Все выставляется через опции.
>
>
>http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/sbin/ping/ping.c?rev=1.108&content-type=text/plain

Спасибо! Здесь действительно есть.
НО: В моем pinge - нет!!! Что это значит? Я что-то не понимаю. Автор ping'ов один.
Попробую этот исходник откомпилировать - будет ли работать...

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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