2012-02-29 21 views
1

複数の接続されたアダプタを持つシステムでネットワークの待ち時間を計算する必要があります。 System.Net.NetworkInformation.Pingクラスを使用してアドレスにpingを実行し、RoundtripTimeプロパティを使用して待ち時間を判断しています。複数の接続されたアダプタでのネットワーク遅延の計算

これは問題なく動作します。しかし、複数のアダプタが接続されているシステムでは、使用するソースIPを提供し、利用可能な各接続のレイテンシを判断する必要があります( )。

このクラスは、しかし、私がping DOSコマンドのようなものを必要とする特定の送信元IPアドレス

を使用してpingを実行するオプションを提供していません。このコマンドには-Sというオプションがあり、ソースIPアドレスを指定できます。

System.Net.NetworkInformation.Pingに送信元IPアドレスを指定する方法はありますか。 PingOptionsクラスは、このようなオプションを提供しません。

ありがとうございました。

答えて

0

私は、Pingのクラスを見ていると、このリンク(http://www.dreamincode.net/forums/topic/71263-using-the-ping-class-in-c%23/)は役に立ったが、私はpingを実行するためのソースを設定する方法を発見していません。 ICMPベースのpingを使用する際に留意すべき

一つは、ネットワーク機器は、多くの場合、パケットは、WANリンクなどのネットワークの境界を越える場合は特に、ICMPトラフィックに、通常のパケットよりも低い優先順位を与えるということです。これは、トラフィックが実際に経験しているよりもむしろ、測定結果ではなく問題の指標になるために、パケットがドロップされたり、待ち時間が長くなったりすることがあります。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 インターフェース

見ているわけではないThanks.I
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

をループに以下のコードを使用して任意の特定のトラフィックを測定しました。私は利用可能なネットワーク接続の品質を監視するためのシンプルなWindowsアプリケーションに取り組んでいます。私が監視したいプロパティは、アップロード速度、ダウンロード速度とレイテンシです。 –

+0

私はそれが遅延を解決していない別のアイデアを答えを更新しましたが、それはしかし、質問に答えていない – Erick

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

一般統計に役立ちます –

関連する問題