icmp thru raw sockets
- From
- Gennady Porev (2:5020/69.36)
- To
- Anatoly Skoblov
- Date
- 2001-12-22T21:55Z
- Area
- SU.WINDOWS.NT.PROG
Hi, Anatoly!
19 декабря 2001 12:34 Anatoly Skoblov (2:5030/78) писал(а) к Gennady Porev про icmp thru raw sockets:
GP>> DELPHI5/win2kpro:
GP>> Сделал я приём и отправку ICMP пакетов через raw sockets. А именно:
[skipped]
GP>> "Того самого", родного, 8-го типа, который ping и traceroute,
GP>> WinSock подло фильтрует и отправляет echoreply самостоятельно, гад.
AS> Это достаточно естественно - кто же еще будет отвечать :)
Это совершенно не естественно!!! Поведение raw_sockets, задекларированное в документации, заключается в КОПИРОВАНИИ в сокет приходящей информации. То есть системе должно быть всё равно, какой тип приехал - скопируй сообщение в сокет и отвечай на него как надо самостоятельно. Ну да видно у Билли другая логика.
GP>> Ergo, вопросы:
GP>> 1. Как сделать, что бы сокет (sock_raw,ipproto_icmp или другой)
GP>> принимал ВСЕ типы ICMP-сообщений?
AS> Напистаь kernel mode driver (NDIS протокол) или используй wincap.
К счастью, ни то ни другое не потребовалось :) Есть чудненькая функция WSAIoctl с параметром SIO_RCVALL. Правда с ним происходит какая-то мистика. Вне зависимости от того, True я указываю или False, всё равно начинают приходить все пакеты.
GP>> 2. Как ПРАВИЛЬНО сделать так, что бы можно было самому отправлять IP
GP>> пакеты? Я делал так - сокет (af_inet,sock_raw,ipproto_raw или
GP>> ipproto_ip), потом setsockopt с ipproto_ip и ip_hdrincl в true. Всё
GP>> как в линуксе. После чего сокет не желает bind'иться и читать\писать
GP>> данные куда бы то ни было.
AS> В документации на winsock2 сказано, Что raw sockets поддерживаются
AS> только для ICMP. Вроде бы в P настоящие raw sockets появились.
А я слышал, что именно в вин2к появились настоящие сырые сокеты. Можешь ткнуть мордой в источник?
GP>> Если у кого есть ещё какие-либо идеи относительно того, как ловить и
GP>> отправлять ICMP сообщения типов 0 и 8 с заданным содержанием,
GP>> необязательно через WinSock, очень прошу намылить - в долгу не
GP>> останусь.
AS> Отправть echo request - через icmp.dll или ICMP raw sockets.
А отлавливать контент пакета на тарджет хост icmp.dll не умеет :-( IMHO.
Relax, Gennady. [MCP #2124946]
ICQ UIN: 13031700
--- GoldED/W32 3.0.1
* Origin: EXPAN headquarter (2:5020/69.36)