发送ICMPv6回应请求

时间:2012-01-13 15:28:54

标签: c# ping ipv6 mtu roundtrip

如何在C#中发送ICMPv6回应请求消息?此外,我需要使用IPv6(IPv6数据包中没有DF标志)和数据包丢失来指定路径上的实际带宽,RTT,MTU。

1 个答案:

答案 0 :(得分: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。您可以通过直接使用这些函数获得比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或真正的总带宽,但希望这至少是一个开始!