В Wireshark, если я хочу написать фильтр, который принимает только сообщения о недоступности пункта назначения ICMP (тип 3), фильтр будет icmp[0] == 3
.
Как мне посчитать смещение пакета 0 в этом случае?
РЕДАКТИРОВАТЬ
Судя по приведенному выше изображению из Википедии, тип ICMP меньше 0-7 бит. Следовательно, это первый байт и, следовательно, 0?
Я предполагаю, что вы пытаетесь написать фильтр захвата, а не фильтр отображения; если вы пытаетесь написать фильтр отображения, Мартин Исакссон прав, вам следует сделать icmp.type == 3
.
Да, 0 - это смещение в пакете ICMP.
В более новых версиях libpcap синтаксис поддерживает несколько более удобных способов написания фильтра, а именно icmp[icmptype] == icmp-unreach
. WinPcap основан на версии libpcap с таким синтаксисом, поэтому он также поддерживает это.
Возможно, это ошибка, из-за которой Wireshark не позволяет вам сказать что-то подобное, а именно:
icmp.type == "Destination unreachable"
в фильтре отображения. Я посмотрю, как это исправить.
Ваш фильтр правильный, icmp[0]
действительно соответствует первому байту заголовка ICMP, содержащему тип. Однако мне трудно читать, вам следует использовать icmp.type eq 3
вместо. Это также намного проще, если поле длиннее одного байта.
Здесь отображение ссылки на поле для ICMP.