Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Winsock 2, Win98(WinME) и UDP, как отправить свой заголовок?   Найти похожие ветки 

 
viman ©   (2006-03-10 18:18) [0]

Здравствуйте!
При реализации трассировщика узлов возникла проблема(под Win98): не могу отправить свой UDP заголовок. Для отправки UDP пакетов я делал следущее — создавал сокет так
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
Пропуская следующие действия перейду к сути. Далее формировал UDP заголовок, добавлял до заданного размера пакета(к примеру 32) данные, задавал нужный TTL и все это отсылал с помощью sendto. На WinXP(SP2) все отсылалось на ура(под Win2k могу предположить, что тоже должно работать, но не проверял ещё). Потребовалось это же сделать под Win98(WinME). И что я вижу — полностью игнорируется тип задаваемого сокета, т.е. ведет он себя под Win98 совершенно по другому, в отличие от WinXP. Под Win98 при вызове sendto игнорируется мой заголовок — сокет попросту формирует свой UDP заголовок, а передаваемый мной буфер(со включенным моим UDP заголовком) прицепляет как обычные данные. Все — облом, маршрутизатор, на котором истек TTL посылает мне обратно пакет, содержащий IP заголовок(его), ICMP(его), IP(мой, созданный сокетом), UDP(мой, но тоже созданный сокетом). Данные в пакете отбрасываются(а сними и мой "заголовок") — поэтому хранить в них какие либо идентификаторы не получается. А что там на момент отсылки сокет настряпал в заголовках тоже уже не выловишь.
Вопрос — возможно ли под Win98 отослать свой UDP заголовок? Если да, то как?
Кстати, возникнет ли такая же проблема по NT4, в курсе кто?
А то извращения уже надоели, осталось последнее — взять отладчик, дизассемблер и смотреть ws2_32.dll.
Найти причину, да пачтить во время рантайма, но это уже ...

Спасибо.


 
GanibalLector ©   (2006-03-10 19:25) [1]

SysErrorMessage(WSAGetLastError) смотрел?


 
viman ©   (2006-03-10 19:37) [2]

А это здесь причем? SysErrorMessage(WSAGetLastError) в каком месте проверять?
При создании сокета конечно стоит проверка, все хорошо, иначе бы и не отсылался пакет. При sendto тоже проверка на ошибки стоит, и тоже все хорошо говорит, иначе бы опять же не отсылался пакет, либо не весь(я ж его смотрю потом - весь был послан).
Все вызовы функций выполняются отлично. Тут что-то в самой реализации WS2_32.dll под Win98 похоже, ведь точно этот же код под XP отлично работает - согласно MSDN.
Вот только что? И с чем это едят?


 
GanibalLector ©   (2006-03-10 20:34) [3]

на setsockopt! Дело в том,что IP_HDRINCL появился только в W2k и выше. Соответсвенно,на setsockopt скоре всего и будет ошибка.


 
GanibalLector ©   (2006-03-10 20:38) [4]

И еще,покажи ф-цию формирования CRC. На многих ресурсах ее СПЕЦИАЛЬНО изменяют,дабы толпы ламеров не занимались спуфингом.


 
viman ©   (2006-03-10 21:11) [5]

Дык я его(IP_HDRINCL) и не пользую совсем :)
Ведь, как известно, "setsockopt ( IP_HDRINCL )", служит для того, чтобы известить сокет, что я сам хочу управлять IP заголовком. Что мне вообщем то и не требуется — все что мне нужно в IP так это управлять TTL, а для этого setsockopt(IP_TTL) отлично работает под всеми Windows. Хотя я думал уже, что может самому все сформировать, да беда одна — как раз эта опция(IP_HDRINCL) поддерживается только начиная с Win2000, это я уж знаю. По крайней мере так в MSDN указано. Вот вопрос и возник.


 
Alex Konshin ©   (2006-03-11 11:49) [6]

AFAIK SOCK_RAW is not supported on Win9x at all.


 
viman ©   (2006-03-11 22:59) [7]

Alex Konshin, я бы не говорил так категорично - по крайней мере для ICMP все замечательно работает на RAW и под Win9x, вот проверьте cледущее:
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)


 
Alex Konshin ©   (2006-03-11 23:09) [8]

Во всяком случая я помню какая была шумиха, когда MS наконец-то их реализовала в NT. Поэтому ясно, что в Win9x это не было реализовано, по крайней мере тогда.


 
viman ©   (2006-03-13 11:19) [9]

Alex, какая версия NT имеется ввиду, NT4 или 2000?
Потому как я не смог свой заголовок UDP отправить и под NT4WS+SP6.
У нее выходит такие же проблемы, как  у 9x?



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
15-1149946886
Ламот
2006-06-10 17:41
2006.07.16
Диск D: был да сплыл...


2-1151312771
Kain-Lord
2006-06-26 13:06
2006.07.16
Как прокрутить Webbrowser вниз


1-1149287685
lamer_y
2006-06-03 02:34
2006.07.16
Проблема с TStrings


4-1144095343
Turbid
2006-04-04 00:15
2006.07.16
Проблемма с глобальными переменными в процедуре хука


3-1147762647
Vic111
2006-05-16 10:57
2006.07.16
Группировка. Найти сумму вычисляемых полей.