SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Модератор: Модераторы разделов

Arepo
Сообщения: 15

SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение Arepo »

Собственно думаю что из сабжа ясна проблема. Судя по всему не у одного меня такая штука происходит, но ни одного работающего варианта я не нашёл.
Ну а если подробно, то у меня есть такое:

Код: Выделить всё

if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW))<0)
{
    perror("socket");
    exit(1);
}

if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))<0)
{
    perror("setsockopt");
    exit(1);
}

<...заполнение заголовков...>

if(sendto(sock,packet,sizeof(struct ip)+sizeof(struct tcphdr),0, (struct sockaddr *)&sck, sizeof(sockaddr))<0)
{
    perror("sendto");
    exit(1);
}


на выходе получаю
sendto: Invalid argument

подскажите как мне добиться работоспособности.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение d_Sun »

Моя подпись сильно длинная :)
Спасибо сказали:
Arepo
Сообщения: 15

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение Arepo »

d_Sun
там я был, в пинге тоже используется та опция, но там работает, это факт:)
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение d_Sun »

Arepo писал(а):
17.07.2006 14:24
d_Sun
там я был, в пинге тоже используется та опция, но там работает, это факт:)


Давайте тогда полностью исходник... Будем смотреть ;)
Моя подпись сильно длинная :)
Спасибо сказали:
Arepo
Сообщения: 15

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение Arepo »

Код - во вложении, вообще он почти идентичен коду http://www.nerf.ru/_files/spoof.c
собственно он оттуда и взят, только произведены некоторые изменения в названиях полей структур из-за различия их во фре и линуксе (у меня FreeBSD 6.1)
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение d_Sun »

Arepo писал(а):
17.07.2006 18:00
Код - во вложении, вообще он почти идентичен коду http://www.nerf.ru/_files/spoof.c
собственно он оттуда и взят, только произведены некоторые изменения в названиях полей структур из-за различия их во фре и линуксе (у меня FreeBSD 6.1)


Линуксовый код работает нормально. tcpdump все красиво показывает. Соотв. копать вам надо именно в " изменения в названиях полей структур из-за различия их во фре и линуксе" ;) Да, на фре протестить не удалось, ее сейчас просто нет под рукой...

З.Ы. Похоже вы действительно не правильно заполняете ip хеадер. Посмотрите как здесь.

http://www.opennet.ru/openforum/vsluhforumID9/2762.html
Моя подпись сильно длинная :)
Спасибо сказали:
Arepo
Сообщения: 15

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение Arepo »

(d_Sun @ Jul 18 2006, в 10:24) писал(а):Линуксовый код работает нормально. tcpdump все красиво показывает. Соотв. копать вам надо именно в " изменения в названиях полей структур из-за различия их во фре и линуксе" wink.gif Да, на фре протестить не удалось, ее сейчас просто нет под рукой...

З.Ы. Похоже вы действительно не правильно заполняете ip хеадер. Посмотрите как здесь.

http://www.opennet.ru/openforum/vsluhforumID9/2762.html


Этот код тоже не работает, как я понял он под OpenBSD, может быть там тоже какие-то различия... Вообще странно всё это.
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение d_Sun »

Arepo писал(а):
18.07.2006 14:26
Этот код тоже не работает, как я понял он под OpenBSD, может быть там тоже какие-то различия... Вообще странно всё это.


Хм... Честно говоря сомневаюсь что бы именно в работе с сокетами там были различия... Хотя хрен знает... Ошибка та же?

З.Ы. Поставлю сегодня фрю дома - буду разбираться... ( Вопрос в скором времени может стать актуальным и для меня ;) )
Моя подпись сильно длинная :)
Спасибо сказали:
Arepo
Сообщения: 15

Re: SOCK_RAW + IP_HDRINCL = sendto: Invalid argument

Сообщение Arepo »

(d_Sun @ Jul 18 2006, в 14:29) писал(а):Хм... Честно говоря сомневаюсь что бы именно в работе с сокетами там были различия... Хотя хрен знает... Ошибка та же?

Да, ошибка та же. Я сам был сильно удивлён когда линуксовый код не заработал. Придётся наверное детально разбираться в коде того же пинга.
Спасибо сказали: