2012-01-13 28 views
1

如何在C#中發送ICMPv6 Echo請求消息?此外,我需要指定實際帶寬,RTT,使用IPv6的路徑上的MTU(IPv6數據包中沒有DF標誌)和數據包丟失。發送ICMPv6 Echo請求

回答

2

您是否嘗試過System.Net.NetworkInformation.Ping類? Send()方法返回一個包含狀態和往返時間的PingReply對象。不知道您是否可以從中獲取其他信息(從未需要)。

在底層,Ping使用Windows IP助手功能(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366071%28v=VS.85%29.aspx),如Icmp6SendEcho2。您也許能獲得更多的信息比平包裝類直接使用這些功能,如暴露:

[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或真正的總帶寬,但希望這至少是一個開始!