2012-01-13 10 views
1

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

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^