【发布时间】:2016-05-05 06:37:50
【问题描述】:
我正在学习 C 中的 ping 实现。
问题是,我使用原始套接字来接收数据包。对于所有数据包,我们在ICMP header 中都有一个标识值。
我在多个终端中运行ping。
例如,我在三个终端中运行了三个ping google.com。
第一次ping识别值为23456,第二次ping识别值为34564,第三次ping识别值为98763。
我的问题是第二次 ping 必须接收到 34564 数据包的标识,但它接收到的标识值为 23456。
对于每个 ping,新的原始套接字正在创建。但它收到另一个 ping 数据包。
谁能解释一下,为什么它会收到另一个 ping 数据包?
更新:-
我还有一个疑问。怀疑是,
原始套接字从何处以及如何识别此原始套接字的数据包?
更新 1:-
这是代码的链接。
【问题讨论】:
-
虽然我试过了,但我在你运行的未发布代码中找不到问题。
-
它发生在回复数据包中。使用 recvmsg 我正在接收数据包。在我验证数据包的 recvmsg 之后,在验证过程中,标识值发生了变化。
-
@suresh:感谢您的信息。现在请给我们一些代码..
-
@suresh 您链接的代码是linux
ping命令的来源,他们没有您描述的问题。你需要展示你自己的代码。 -
我只是在学习这段代码。他们跳过了这些数据包。我怀疑这是原始套接字。为什么它会收到另一个套接字数据包?
标签: c linux ping raw-sockets