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)