Вычислить crc кадров Ethernet

Я хочу вычислить в tcl-скрипте CRC для этого кадра:

00000A00080000000A00090000004500002E0000000040117AC00000000000000000003F003F001AB6EB000102030405060708090A0B0C0D0E0F1011

Ожидаемый CRC — 0x1652255A. Я попробовал следующее (нашел здесь):

% set string \x00\x00\x0A\x00\x08\x00\x00\x00\x0A\x00\x09\x00\x00\x00\x45\x00\x00\x2E\x00\x00\x00\x00\x40\x11\x7A\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x00\x3F\x00\x1A\xB6\xEB\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\
x0D\x0E\x0F\x10\x11
% package require crc32
1.3
% crc::crc32 -format %X $string
690CE0EE ;# not good

% set string 00000A00080000000A00090000004500002E0000000040117AC00000000000000000003F003F001AB6EB000102030405060708090A0B0C0D0E0F1011
% set bin [binary format H* $string]
% crc::crc32 -format %X $bin
690CE0EE ;# same than previous one

Что-то я не понимаю с этим процессом, и я не уверен, что он работает правильно, потому что результат всегда один и тот же:

%  crc::crc32 -format %X foo
690CE0EE
%  crc::crc32 -format %X somethingdifferent
690CE0EE

Если я воспользуюсь этим онлайн-инструментом, если найду ожидаемый результат.. .

Проблема исходит от меня или от пакета?


person little-dude    schedule 28.11.2013    source источник


Ответы (1)


Я не вижу того, что вы видите.

% set string \x00\x00\x0A\x00\x08\x00\x00\x00\x0A\x00\x09\x00\x00\x00\x45\x00\x00\x2E\x00\x00\x00\x00\x40\x11\x7A\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3F\x00\x3F\x00\x1A\xB6\xEB\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11


    E.@zÀ??¶ë



% package require crc32
1.3.1
% crc::crc32 -format %X $string
1652255A
person Mark Adler    schedule 29.11.2013
comment
Да, я не указал возвращаемое значение заданной строки \x00\x00... в своем сообщении, но у меня то же самое. Проблема с последней командой, которая в моем случае всегда возвращает 690CE0EE, независимо от входных данных. У вас есть результат, который я ожидаю на самом деле, спасибо за подтверждение того, что это должно работать. - person little-dude; 29.11.2013