Winsock 2, Win98(WinME) и UDP, как отправить свой заголовок?
От: vimans  
Дата: 10.03.06 15:06
Оценка:
Здравствуйте!
При реализации трассировщика узлов возникла проблема(под 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 заголовок? Если да, то как?
А то извращения уже надоели, осталось последнее — взять отладчик, дизассемблер и смотреть ws2_32.dll.
Найти причину, да пачтить во время рантайма, но это уже ...

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.