2008-11-26 2 views
1

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

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

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

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

Спасибо!

ответ

0

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

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

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

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

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

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

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

@ Все:

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

1

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

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

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