异步ICMP ping问题
我正在用Python写一个服务,这个服务可以同时对多个域名进行异步ping操作。也就是说,它需要能够同时ping很多个IP地址。我是用epoll的事件循环来实现的,但遇到了数据包丢失的问题。
当同时发送很多ICMP请求时,很多回复没有到达我的服务。这种情况可能是什么原因造成的?我该如何让我的服务能够同时ping多个主机而不丢失数据包呢?
谢谢!
1 个回答
0
你可能遇到的问题是因为ICMP协议在OSI模型中属于第三层,它不使用端口进行通信。简单来说,ICMP并不是为了这个目的而设计的。不过,你想要的功能还是可以实现的,但可能是你使用的IP协议栈出了问题。如果你是在Windows系统上,那这个问题几乎可以肯定就是由此引起的。建议你使用Wireshark这个工具,看看是否真的收到了传入的数据包。如果确实收到了,那么可以用libpcap来跟踪ICMP的回复。如果问题出在发送数据上,那你就需要使用原始套接字,自己构建ICMP数据包。