Как проверить содержимое возвращаемого пакета в ICMP Ping / Echo? - PullRequest
1 голос
/ 26 ноября 2008

При проверке эхо-запросов ping кажется, что утилиты / библиотеки часто только проверяют контрольную сумму пакета и фактически не подтверждают, что отправленная полезная нагрузка совпадает с возвращенной полезной нагрузкой. Например, анализатор ICMP Wireshark проверяет только неправильные контрольные суммы, и это все, что Ruby net-ruby также проверяет.

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

Как я могу проверить полезную нагрузку эха, чтобы убедиться, что она такая же, как и отправленная мной? Если есть отдельная утилита «paranoid ping», которую я мог бы использовать, это тоже хорошо - мне просто нужно иметь возможность изменять длину и частоту пинга, так как я вижу проблему только при затоплении сети.

Я бы предпочел его в форме библиотеки / фрагмента Ruby, но приемлемо любое языковое или автономное приложение, если я могу запустить его в Windows.

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 ноября 2008

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

Вы просматриваете контрольную сумму TCP или контрольную сумму ICMP? Контрольная сумма ICMP не включает заголовки TCP, только тип ICMP, код, контрольную сумму и поля данных. Ошибка контрольной суммы TCP не обязательно означает, что содержимое ICMP не повреждено, это может означать, что заголовки TCP были испорчены (возможно, из-за сломанного NAT).

0 голосов
/ 27 ноября 2008

@ Том: Спасибо за ответ. Вы сказали:

Получатель пересчитывает контрольную сумму на основе данных и сравнивает ее с отправленной.

Но тогда вы также сказали:

Контрольная сумма ICMP не включает заголовки TCP, только тип ICMP, код, контрольную сумму и поля данных.

Тип ICMP различен для эхо-запроса / ответа (один - 0, другой - 8). Таким образом, по определению (и на практике, если вы посмотрите на Wireshark) контрольные суммы ICMP не совпадают между запросом отправки и ответом эха.

Моя проблема заключалась в том, что если утилиты / библиотеки ping проверяли что-либо (и часто они этого не делали), они проверяли только, чтобы убедиться, что контрольная сумма соответствует данным. Кажется, что очень редко люди действительно проверяют отправленные данные с помощью эхо-ответа, чтобы убедиться, что эти две полезные нагрузки идентичны. Возможно, что и запрос, и ответ могут иметь действительные контрольные суммы, но разные полезные нагрузки, и большинство программ Ping, которые я видел, не проверяли такое условие (но это, похоже, ошибка, с которой я сталкиваюсь) устройство на данный момент).

Спасибо, что посмотрели на мой вопрос и ответили, хотя это очень ценится.

@ Все:

В ответ на мой собственный вопрос я смог использовать надежный класс .Net Ping , поскольку он дает мне свободный доступ к полученному буферу ответов (в отличие от большинства других библиотек Ping, которые я обнаружил).

...