Проблема с асинхронным пингом ICMP - PullRequest
1 голос
/ 20 февраля 2010

Я пишу сервис на python, который асинхронно пингует домены. Таким образом, он должен иметь возможность пинговать несколько IP-адресов одновременно. Я написал это на epoll ioloop, но есть проблема с потерей пакетов. Когда есть много одновременных ICMP-запросов, большая часть ответов на них не достигла моего обслуживания. Что может вызвать эту ситуацию и как я могу заставить мою службу пинговать несколько хостов одновременно без потери пакетов?

Спасибо)

1 Ответ

0 голосов
/ 20 февраля 2010

Проблема, с которой вы можете столкнуться, связана с тем, что ICMP является уровнем 3 модели OSI и не использует порт для связи.Короче говоря, ICMP не предназначен для этого.Желаемое поведение все еще возможно, но, возможно, используемый вами IP-стек мешает, и если это в системе Windows, то вы на 100% уверены, что это ваша проблема.Я бы запустил Wireshark, чтобы убедиться, что вы действительно получаете входящие пакеты, если это так, то я бы использовал libpcap для отслеживания ответов ICMP.Если проблема связана с отправкой, вам придется использовать необработанные сокеты и создавать свои собственные пакеты ICMP.

...