【发布时间】:2012-01-13 06:34:03
【问题描述】:
目前正在尝试实现一个简单的 ping 程序,以自学 C# 和 .NET 中的网络编程。
我已经成功地初始化了一个原始套接字并正确地构建了一个 ICMP 回显请求数据包。运行我的程序时,Wireshark 确认我正在向所需目的地发送 Echo 请求,但是远程机器永远不会发回 echo 回复。我尝试向多台机器发送相同的结果(并且这些机器中的每台都可以使用 Windows ping 实用程序进行 ping)。我的代码是这样的:
IcmpPacket echoReq = new IcmpPacket;
/*Some code to initialize packet*/
rawSocket.Send(echoReq, destinationIP); //syntax may be wrong, dont have the code infront of me sorry
rawSocket.ReceiveFrom(buffer, remoteEndpoint);
如果有人能提出远程机器不发送任何回复的任何原因,我将不胜感激。
【问题讨论】:
-
即使 Wireshark 将其识别为 ICMP 回显请求,数据包也一定有问题。最可能想到的罪魁祸首是标头校验和(IP 和 ICMP)。你检查过那些吗? Wireshark 应该告诉你它是否认为它们是正确的。
-
您发送的请求与 windows ping 实用程序发送的请求之间有什么区别吗?你也可以用wireshark嗅探那些。如果您发现差异,您可能会发现您的问题。
-
您可能会发现检查 Microsoft 的
Ping实现会提供有用的信息。见\Source\.Net\4.0\DEVDIV_TFS\Dev10\Releases\RTMRel\ndp\fx\src\Net\System\Net\NetworkInformation\ping.cs来自the reference source -
原来校验和没有正确分配给我的数据包。非常感谢大家的建议!