Отправка ICMPv6 эхо-запроса - PullRequest
1 голос
/ 13 января 2012

Как я могу отправить сообщение эхо-запроса ICMPv6 в C #?Кроме того, мне нужно назначить фактическую пропускную способность, RTT, MTU на пути с использованием IPv6 (в пакете IPv6 нет флага DF) и потери пакетов.

1 Ответ

2 голосов
/ 13 января 2012

Вы пробовали класс 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 или истинную общую пропускную способность, но, надеюсь, это, по крайней мере, начало!

...