1

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

4

1 回答 1

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 或真正的总带宽,但希望这至少是一个开始!

于 2012-01-13T15:53:06.530 回答