2013-11-27 3 views
5

Как вычислить контрольную сумму ICMP-эхо-запроса или ответа, когда контрольная сумма должна включать в себя часть данных, часть данных может быть переменной по размеру, и нет способа предвидеть размер данных?ICMP echo checksum

Здесь documentation о том, как вычислить контрольную сумму заголовка ICMP.

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

+0

www.roseperrone.com не может быть доставлен! – fedorqui

ответ

4

Когда отправитель вычисляет контрольную сумму, значение вставляется в поле zero'd. Затем приемник выполняет обратное, вытягивает контрольную сумму, нулевое поле и вычисляет контрольную сумму с этим полем, установленным на нули. Он сравнивает значение, которое он вычисляет, с тем, которое он извлек.

Обе стороны передачи вычисляют контрольную сумму с нулевым полем.

Update

Пример того, как выполнить этот расчет существует на этом Scribd presentation, начиная с горкой 44. Я также включая соответствующий пример скользят ниже.

На рисунке 9.19 показан пример расчета контрольной суммы для простого сообщения эхо-запроса (см. Рис. 9.14). Мы случайно выбрали идентификатор равным 1, а порядковый номер - 9. Сообщение разделено на 16-битные (2-байтовые) слова. Слова добавляются вместе и сумма дополняется. Теперь отправитель может поместить это значение в поле контрольной суммы .

Ping Checksum calculation

Вы расколоть заголовок ICMP и данных в 16-битных слов (с использованием 0x0000 для поля контрольной суммы), получить сумму этих слов, а затем те, дополнения суммы. Затем он вводится в поле контрольной суммы.

+0

Это не мой вопрос. Мне нужно вычислить контрольную сумму по всему ICMP-сообщению, которое может включать в себя часть данных с переменным размером. Как узнать размер сообщения, по которому я вычисляю контрольную сумму? –

+0

Я думаю, что лучший вопрос на этом этапе - как вы разбираете свои пакеты? Пакетные данные должны быть частью анализа пакетов. Это даст вам размер данных. – Andy

+0

Данные не являются обязательными, и для моих целей мне все равно, какие данные, поэтому я вообще не разбираю их. Но отправитель все равно мог включить данные в контрольную сумму, поэтому мне нужно знать длину данных, поэтому я могу включить ее в мою проверку контрольной суммы. –

3

Вы можете рассчитать длину сообщения ICMP, вычитая размер IP-заголовка из поля «Общая длина» в заголовке IP.

+0

Есть ли доказательства этого? –

+0

ICMP-пакет состоит из IP-заголовка и сообщения ICMP. RFC 792 описывает поле «Общая длина» как «Длина заголовка Интернета и данные в октетах». Для ICMP-пакета данные являются сообщением ICMP. –

+0

Ops, я думал, вы говорите о контрольной сумме. Но вы сомневаетесь в контрольной сумме. –

1

Имейте в виду, что в IPv6 псевдо-заголовок заголовка IPv6 также включен в расчет контрольной суммы. В IPv4 это не выполняется, потому что заголовок уже сам проверяет.