我正在编写一个多线程 ping 程序。我在每个线程(针对每个 IP)上创建了原始套接字,并使用 sendto() 向每个线程发送了 ICMP Echo Request,然后我在每个线程中执行了 recvfrom()。我从各种套接字中的 IP 获取消息(例如,如果我使用套接字 S1 为 IP1 发送到,我得到从 IP1 到 S1、S2 等的回显回复)。我需要绑定(bind)吗?
还有一个问题是,即使我只发送了 1 个 ICMP 请求,我也会从目标返回许多回显回复。有什么办法可以限制这个吗?这导致我错过了其他一些 ICMP 数据包。我的程序有没有办法要求目标停止发送 ICMP 回显?
谢谢,
最佳答案
原始套接字接收所有传入的数据包;您将需要进行自己的过滤,或者 - 更好的是 - 只打开一个原始套接字,并在单个线程上检测所有传入的回显回复。
您的重复数据包可能是因为多个原始套接字 - 您将获得每个传入数据包的一份副本每个套接字。另请注意,在某些情况下,互联网数据包可能会被复制(不过这种情况很少见)。
关于c - 创建 PING 程序时限制 ICMP 回显回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904135/