что может привести к сбою ICMPsendEcho при успешном выполнении ping.exe - PullRequest
8 голосов
/ 21 февраля 2012

У меня интересная ситуация, и я не совсем уверен, как ее устранить. Я сделал несколько поисков чего-то похожего на мою ситуацию, но ничто не соответствует этому. Если ответ уже существует где-то здесь, я был бы признателен всем, кто мог бы указать мне правильное направление.

Хорошо, к делу.

Я пишу сторожевое приложение для мониторинга интернет-соединения. Он предназначен для проверки связи с набором доменов с установленным интервалом, и когда любой из них отвечает на запрос, таймер состояния сбрасывается. Если таймер состояния когда-либо выходит за пределы установленного порога, для устранения проблемы предпринимаются несколько этапов корректирующих действий.

Достаточно просто, верно?

Вот где это становится странным.

Я использую ICMPsendecho для выдачи запроса ping. В моей среде разработки (win7) все работает нормально, тестирование и все прошло гладко. Однако в среде, где он развертывается, он не получает ответа. Среда развертывания - это компьютер с Windows XP sp3.

В процессе устранения неисправностей я отметил несколько вещей, которые могут или не могут быть полезны при попытках решить эту проблему.

windows ping.exe прекрасно работает в среде развертывания для всех доменов, которые я использую для проверки состояния подключения, это только мои вызовы ICMPsendecho, которые, похоже, не генерируют ответы.

Я установил wireshark в среде развертывания и вижу, что пакеты успешно отправляются для запросов на оба типа пинга. Пинг Windows генерирует пакеты запроса длиной 74 байта, а мой программный вызов генерирует пакеты длиной 42 байта. Ответные пакеты Windows аналогично составляют 74 байта при получении.

Переход на среду разработки на минуту с установленным wireshark. Пинг Windows генерирует аналогичное обстоятельство, как в среде развертывания с пакетами. Тем не менее, мое приложение, когда оно генерирует запросы, имеет длину 42 байта (то же самое, что и среда развертывания), но полученные ответы имеют длину 60 байтов.

Как я уже сказал, эта информация может или не может быть полезной, но я пытаюсь выяснить, почему это приложение не может генерировать ответы ICMP, когда пинг Windows, кажется, работает нормально на этой машине.

Еще один маленький кусочек, который может помочь, подключение к интернету, которое отслеживалось, использует повышенные 4G точек доступа AT & T, реальное устройство - беспроводная карта MC8790 AirPrime sierra.

У кого-нибудь есть идеи, почему эти пинги не работают?

Заранее благодарим за любую полезную информацию, которая у вас есть, и за то, что нашли время прочитать мой пост.

PS.

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Ответ может быть в размере отправляемого вами эхо-запроса (кажется, что для полезной нагрузки существует недокументированный минимальный размер 20 байтов).Смотрите этот пост для получения дополнительной информации: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

2 голосов
/ 21 февраля 2012

Вы проверили права пользователя?Ping.exe не требует прав администратора, но необработанные ICMP-команды в Windows требуют прав администратора.

См. Этот пример: http://www.delphi -central.com / tutorials / icmp-ping.aspx

Обратите внимание, однако, что для реализаций Windows NT и Windows 2000 необработанные сокеты проходят проверку безопасности и доступны только членам группы администратора.


Другой возможной причиной может быть брандмауэр , который блокирует пакеты ICMP.

0 голосов
/ 10 мая 2013

У нас была такая же ошибка с клиентом.Решение состояло в том, чтобы реализовать IcmpSendEcho2 в качестве плана B при сбое IcmpSendEcho.Это сработало!

...