1

C# で ICMPv6 エコー要求メッセージを送信するにはどうすればよいですか? さらに、実際の帯域幅、RTT、IPv6 を使用するパス上の MTU (IPv6 パケットには DF フラグはありません)、およびパケット損失を指定する必要があります。

4

1 に答える 1

2

System.Net.NetworkInformation.Ping クラスを試しましたか? Send() メソッドは、ステータスと往復時間を含む PingReply オブジェクトを返します。そこから他の情報を引き出すことができるかどうかはわかりません(これまで必要ではありませんでした)。

内部では、Ping はIcmp6SendEcho2 などのWindows IP ヘルパー関数 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366071%28v=VS.85%29.aspx ) を使用します。これらの関数を直接使用することで、Ping ラッパー クラスが公開するよりも多くの情報を取得できる場合があります。

[DllImport("iphlpapi.dll", SetLastError = true)]
internal static uint Icmp6SendEcho2(SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext, byte[] sourceSocketAddress, byte[] destSocketAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);

(「replyBuffer」は ICMPV6_ECHO_REPLY 構造体 - http://msdn.microsoft.com/en-us/library/windows/desktop/bb485842%28v=VS.85%29.aspx )

MTU または真の合計帯域幅を取得する方法があるかどうかはわかりませんが、これが少なくとも最初の一歩になることを願っています!

于 2012-01-13T15:53:06.530 に答える