Я написал программу, которая использует сокеты для захвата пакетов на сетевых интерфейсах. Сначала я собираю все IP-адреса своей машины, используя gethostbyname , затем привязываю необработанный сокет к каждому ip с SOCK_RAW , IPPROTO_IP и SIO_RCVALL, Поток выполняется для каждого IP, который вызывает recv на соответствующем сокете (один сокет для каждого ip). Эта программа отлично работает.
Но я нашел специальный адрес с именем INADDR_ANY . MSDN сообщает, что SIO_RCVALL нельзя использовать с INADDR_ANY, здесь :
Сокет также должен быть привязан к
явный локальный интерфейс IPv4 или IPv6,
это означает, что вы не можете связать с
INADDR_ANY или in6addr_any.
Можно ли отслеживать и перехватывать все пакеты (пакеты, относящиеся к локальному компьютеру, а не пакеты других компьютеров) с помощью одного сокета?
Спасибо