>Здравствуйте. Кто-нибудь сталкивался с такой проблемой:
>Создается сокет: 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 .
|