Ограничение ICMP-эхо-ответов при создании программы PING - PullRequest
3 голосов
/ 02 августа 2011

Я писал многопоточную программу ping.Я создал rawsockets в каждом потоке (для каждого IP) и отправил эхо-запрос ICMP каждому с помощью sendto (), а затем выполнил recvfrom () в каждом потоке.Я получаю сообщения от IP-адресов в различных сокетах (например, если я использовал сокет S1 для sendto для IP1, я получаю эхо-ответы от IP1 до S1, S2 и т. Д.).Нужно ли делать привязку?

Еще одна проблема заключается в том, что, хотя я отправляю только 1 ICMP-запрос, я получаю много эхо-ответов от цели.Есть ли способ, которым я могу ограничить это?Это заставляет меня пропустить некоторые другие пакеты ICMP.Есть ли способ для моей программы попросить, чтобы цель прекратила посылать эхо ICMP?

Спасибо,

1 Ответ

3 голосов
/ 02 августа 2011

Сырые сокеты забирают все входящие пакеты;вам нужно будет выполнить собственную фильтрацию или, что еще лучше, открыть только один необработанный сокет и обнаружить все входящие эхо-ответы в одном потоке.

Возможно, ваши дублирующиеся пакеты из-за нескольких необработанных сокетов- вы получите одну копию каждого входящего пакета на сокет .Также обратите внимание, что в некоторых случаях интернет-пакеты могут дублироваться (однако это редко).

...