目前正在尝试实现一个简单的ping程序来自学C#和.NET中的网络编程。
我已设法初始化原始套接字并正确构建ICMP回应请求数据包。运行我的程序时,Wireshark确认我正在向所需目的地发送一个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);
如果有人可以提出远程机器没有发送任何回复的任何理由,我将非常感激。
答案 0 :(得分:1)
您的问题中的信息很难确定。有太多事情可能出错。但这里有一些我会开始检查。
destinationIP
和remoteEndpoint
值可能指向不同的地址。似乎不太可能,但想把它叫出来答案 1 :(得分:0)
你必须建立自己的数据包吗?否则有Ping类
http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx
编辑:
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.contoso.com");
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}