我需要计算具有多个连接适配器的系统上的网络延迟。 我使用System.Net.NetworkInformation.Ping类来ping地址并使用RoundtripTime属性来确定延迟。
这很好用。但是在具有多个连接适配器的系统上,我需要 提供要使用的源IP,以确定每个可用连接的延迟。
但是,此类不提供使用特定源IP地址进行ping的选项
我需要类似ping DOS命令的东西。此命令具有-S选项,允许您提供源IP地址。
有没有办法在System.Net.NetworkInformation.Ping中指定源IP地址。 PingOptions类不提供任何此类选项。
感谢。
答案 0 :(得分:0)
我发现此链接(http://www.dreamincode.net/forums/topic/71263-using-the-ping-class-in-c%23/)对查看Ping类很有帮助,但我找不到设置Ping源的方法。
使用基于ICMP的ping时要记住的一件事是,网络设备通常会使ICMP流量的优先级低于普通数据包,尤其是当数据包跨越网络边界(如WAN链路)时。这可能导致ping被丢弃或显示出比流量实际体验更高的延迟,并且有助于成为问题的指标而不是衡量标准https://stackoverflow.com/a/1671489/901395
最大的问题可能是,您的应用程序是否会在具有QoS的网络上运行,如果是这样,您真正关注的是什么类型的流量?
IPGlobalStatistics类可能会有所帮助:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalstatistics(v=vs.90).aspx
这个答案也许有帮助:https://stackoverflow.com/a/2506432/901395 使用下面的代码循环访问接口
class MainClass
{
static void Main()
{
if (!NetworkInterface.GetIsNetworkAvailable())
return;
NetworkInterface[] interfaces
= NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
Console.WriteLine(" Bytes Sent: {0}",
ni.GetIPv4Statistics().BytesSent);
Console.WriteLine(" Bytes Received: {0}",
ni.GetIPv4Statistics().BytesReceived);
}
}
}
答案 1 :(得分:0)
//Provide any URL to ping.
Uri objURL = new Uri("ANY URL");
System.Net.NetworkInformation.Ping objPing = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingOptions objPingOptn = new System.Net.NetworkInformation.PingOptions();
//Decides if packet to be sent in a go or divide in small chunks
objPingOptn.DontFragment = true;
//Creating a buffer of 32 bytes.
string tPacketData = "DummyPacketsDataDummyPacketsData";
byte[] bBuffer = Encoding.ASCII.GetBytes(tPacketData);
//Can provide host name directly if available
System.Net.NetworkInformation.PingReply objPingRply = objPing.Send(objURL.Host, 120, bBuffer, objPingOptn);
objPing.Dispose();
if (objPingRply.Status == System.Net.NetworkInformation.IPStatus.Success)
return true;
else
return false;