c - 创建 PING 程序时限制 ICMP 回显回复

标签 c ping icmp

我正在编写一个多线程 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/

相关文章:

c - 在 C 中用 fork 搜索

c - 将 fscanf 与数组一起使用

C UDP服务器访问问题

c - 如何验证 ICMPv6 校验和? (为什么我总是得到 0x3fff 的校验和?)

cygwin下编译icmp相关代码(缺少 "icmp"struct)

C - 初始化结构数组

c - 调用 ld-2.13.so 中的 _dl_open

vbscript - 如果连续ping失败,则启动traceroute的脚本,输出到日志

java - 为什么我无法 ping 通计算机?

c++ - 回复 Ping 广播