2012-02-29 43 views
1

我需要計算其中有多個連接的適配器的系統上的網絡延遲。 我使用System.Net.NetworkInformation.Ping類來ping一個地址,並使用RoundtripTime屬性來確定延遲。計算網絡延遲多連通適配器

這工作正常。但是,在具有多個連接適配器的系統上,我需要 提供要使用的源IP,以確定每個可用連接的延遲。

該類但不提供一個選項,使用特定的源IP地址

我需要類似於平DOS命令的東西來ping。該命令有-S選項,允許您提供源IP地址。

是否有指定System.Net.NetworkInformation.Ping源IP地址的方式。 PingOptions類不提供任何此類選項。

謝謝。

回答

0

我發現這個鏈接(http://www.dreamincode.net/forums/topic/71263-using-the-ping-class-in-c%23/)大有裨益的看平類,但我還沒有找到一種方法來設置一個平安的來源。

一件事使用基於ICMP的ping時,要記住的是,網絡設備會經常給ICMP流量的優先級比正常報文,特別是當數據包穿過網絡邊界,如WAN鏈路。這可能會導致ping丟失或顯示比交通實際遇到的延遲更高的延遲,並且有助於成爲問題而不是測量的指示器https://stackoverflow.com/a/1671489/901395

最大的問題可能是您的應用程序將在網絡上與QoS,如果是的話,你真正在測量什麼類型的流量?

IPGlobalStatistics類可能會有所幫助: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); 
    } 
} 
} 
+0

Thanks.I不是找:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalstatistics(v=vs.90).aspx

這個答案可能有幫助,以及爲在測量任何特定的交通。我正在研究一個簡單的Windows應用程序來監視可用網絡連接的質量。我想監視的屬性是上傳速度,下載速度和延遲。 – 2012-02-29 18:56:23

+0

我已經更新了另一個想法,答案不解決延遲,但與一般的統計數據可以幫助 – Erick 2012-02-29 19:29:48

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; 
+1

不回答這個問題,雖然 – 2012-09-27 06:56:37