2014-10-20 9 views
1

Я искал использование IcmpSendEcho и обнаружил, что он не сможет выполнить проверку некоторых устройств (например, моего домашнего концентратора BT 4) с сообщением GetLastError 11010. Хотя для других устройств он работает нормально (когда выполняются в одной и той же системе). Для сравнения, ping.exe преуспевает на всех этих устройствах, но я не знаю, как отличается реализация Ping. Все случаи, которые я пробовал до сих пор, были IPv4, которые я предоставил напрямую (так что DNS и т. Д.).IcmpSendEcho завершается с ошибкой, но «ping» завершается успешно

hIcmpFile = IcmpCreateFile(); 
    ipAddress = inet_addr(ipAddressStr); 
    ...hIcmpFile is reused 
    static const WORD sendSize = 32; 
    static const DWORD replySize = sizeof(ICMP_ECHO_REPLY) + sendSize; 
    char sendData[sendSize] = { 0 }; 
    char replyBuffer[replySize]; 
    auto ret = IcmpSendEcho(hIcmpFile, ipAddress, sendData, sendSize, NULL, replyBuffer, replySize, 1000); 
    if (ret == 0) 
    { 
     auto error = GetLastError(); 

Единственный другой отчет, который я нашел, - what would cause ICMPsendEcho to fail when ping.exe succeeds. Однако эти ответы отличаются от моей проблемы. Я попытался использовать разные размеры полезной нагрузки, и я попробовал IcmpSendEcho2, что также не удалось для тех же устройств.

+0

Ваш код выглядит в значительной степени идентичным примеру, опубликованному на странице MSDN функции. Пробовали ли вы использовать инструмент захвата сети, чтобы проверить, действительно ли пакеты покидают хост? –

+0

11010 - 'IP_REQ_TIMED_OUT'. –

+0

Да, и ping.exe последовательно меньше 2 мс на моем локальном маршрутизаторе lan ... Я попытаюсь сравнить их в Wireshark. –

ответ

0

Попробуйте использовать права администратора.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17003454) – wasthishelpful

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