Шестнадцатеричные флаги Tshark TCP для текстовых меток

Первый вопрос может позаботиться об этом. При захвате в tshark с использованием полей, таких как -e tcp.flags, есть ли способ получить на выходе метку флага, например FIN, вместо 0x1? Я сделал несколько поисков в документации. Наверное, прямо у меня под носом.

Если нет, то мне нужна функция в моем конвейере данных для преобразования шестнадцатеричного значения в метки. Я думал о том, чтобы иметь словарь, например {'0x1':'FIN'}, и сопоставить его, но я не уверен во всех комбинациях флагов, которые могут появиться.

Итак, я беру шестнадцатеричную строку, преобразовываю ее в целое число, а затем в двоичную строку. Я превращаю это в список [0,0,0,0,0,1] и использую его как фильтр для списка меток, такого как [u, a, p, r, s, f], который возвращает любые объединенные метки, например для нас. Использование Python. Нужна ли эта функция? Есть ли более эффективный/элегантный способ преобразовать шестнадцатеричный код в метки?


person John    schedule 22.06.2020    source источник


Ответы (1)


Обычно я бы предложил использовать -e tcp.flags.str, но у меня это не отображается должным образом, по крайней мере, при работе в Windows 10 с TShark (Wireshark) 3.3.0 (v3.3.0rc0-1433-gcac1426dd6b2). Например, вот что я получаю для того, что должно быть только индикацией SYN:

tshark.exe -r tcpfile.pcap -c 1 -T fields -e frame.number -e tcp.flags -e tcp.flags.str
1       0x00000002      A·A·A·A·A·A·A·A·A·A·SA·

Вы можете попробовать его в своей системе, и, возможно, он будет отображаться так, как задумано (в Wireshark он правильно отображается как ··········S·, так что это может быть ошибка tshark или проблема с моими оболочками — пробовал как с cmd, так и с powershell.) В любом случае , если он не отображается должным образом в вашей системе, попробуйте использовать ссылку tcp-flags-postdissector.lua dissector, написанный Дидье Стивенсом, который был вдохновлен Snort и который, как мне кажется, послужил источником вдохновения для встроенного в Wireshark поля tcp.flags.str. Я лично предпочел '.' вместо '*' для флаговых битов, которые не установлены, поэтому я настроил диссектор Lua, чтобы он вел себя таким образом. Используйте его как есть или настройте его по своему усмотрению. С диссектором Lua я получаю ожидаемый результат:

tshark.exe -r tcpfile.pcap -c 1 -T fields -e frame.number -e tcp.flags tcpflags.flags
1       0x00000002      ........S.

Поскольку одна и та же неверная строка отображается как в cmd, так и в powershell, для меня это выглядит как ошибка tshark, поэтому я подал Ошибка Wireshark 16649.

person Christopher Maynard    schedule 23.06.2020
comment
Обновление: ошибка 16649 была исправлена, но она не была перенесена ни в одну из стабильных веток, хотя я не уверен, почему. Вы можете загрузить последний автоматический установщик с сайта wireshark.org/download/automated, но если для вашей платформы его нет, вам придется либо собрать Wireshark самостоятельно, либо дождаться выхода версии Wireshark 3.4.0 (3 квартал 2020 г. по wiki.wireshark.org/Development/LifeCycle), или запросите перенос этого исправления ошибки в систему отслеживания ошибок или в список рассылки разработчиков Wireshark: wireshark.org/lists. - person Christopher Maynard; 22.08.2020