1

我正在用python编写异步ping域的服务。所以它必须能够同时ping多个IP。我在epoll ioloop上写的,但是丢包有问题。当同时有许多 ICMP 请求时,对它们的大部分回复都没有到达我的服务范围。什么可能导致这种情况以及如何使我的服务同时 ping 多台主机而不会丢失数据包?

谢谢)

4

1 回答 1

0

您可能遇到的一个问题是,ICMP 是 OSI 模型的第 3 层,并且不使用端口进行通信。简而言之,ICMP 并不是为此而设计的。所需的行为仍然是可能的,但您使用的 IP 堆栈可能会妨碍您,如果这是在 Windows 系统上,那么 100% 确定这是您的问题。我会启动 Wireshark 以确保您确实收到了传入的数据包,如果是这种情况,那么我将使用 libpcap 来跟踪 ICMP 回复。如果问题在于发送,那么您将不得不使用原始套接字并构建您自己的 ICMP 数据包。

于 2010-02-19T22:00:11.117 回答