Глава 7. Экранный фильтр

Материал из wireshark.wiki

7.1 Введение

Экранный фильтр Wireshark – подсистема Wireshark, которая используется для исключения части пакетов из отображения в области списка пакетов.

Выражение экранного фильтра Wireshark – набор правил, использующихся в экранном фильтре для указания того, какие именно пакеты должны быть отображены в области списка пакетов.

С помощью экранного фильтра можно из всей массы пакетов, отобразить только те пакеты, соответствующие определенным критериям, например те, что передаются между конкретными узлами сети, либо пакеты определенного протокола. Как результат, будет уменьшен объем отображаемых данных.

Экранный фильтр не удаляет пакеты

При использовании экранного фильтра происходит скрытие отображения пакетов, а не их удаление. Если удалить экранный фильтр, то отображение всех пакетов будет возобновлено в полном объеме.


Фильтр захвата и экранный фильтр – это не одно и то же

Важно не путать фильтр захвата (capture filter) и экранный фильтр (display filter). Это разные подсистемы, имеющие разное назначение. Также эти подсистемы используют разный синтаксис в своих выражениях.


Экранный фильтр Wireshark Экранный фильтр Wireshark

Если выражение указано корректно, то строка ввода окрасится в зеленый цвет, а если некорректно, то в красный.


Важно знать булеву алгебру

Для того чтобы уметь писать выражения для фильтров захвата или экранных фильтров в Wireshark, нужно владеть знаниями по булевой алгебре. Соответственно, для продолжения знакомства с материалом рекомендуется изучить этот предмет по этой статье. Она рассчитана на изучение булевой алгебры с нуля. В статье приведено много простых и понятных примеров.


Желательно уметь писать выражения фильтра захвата

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


7.2 Условия

Выражения в экранном фильтре Wireshark состоят из одного или нескольких условий, к которым дополнительно могут быть заданы параметры. В зависимости от условия наличие параметра может быть либо обязательным требованием, либо опциональной возможностью. Кроме того, есть условия, которые не подразумевают использование параметров. Во многих выражениях имеются условия, которые не указаны явным образом, но подразумеваются по умолчанию.

Если рассмотреть аналогию из жизни, то в выражении «надень футболку синего цвета», имеется условие «одежда» (которое подразумевается по умолчанию) со значением (параметром) «футболка». Также имеется дополнительное условие «цвет», которое имеет значение (параметр) «синий».

Экранный фильтр Wireshark обладает намного большими возможностями фильтрации, по сравнению с фильтром захвата. С помощью экранного фильтра можно выполнить фильтрацию на основе абсолютно любого параметра, который можно увидеть в дампах Wireshark. В т.ч. и по тем параметрам, которые указываются в квадратных скобках ([ ]), т.е. на основе той информации, которая на самом деле в кадре не содержится, но была добавлена самой утилитой Wireshark для большей информативности. Т.к. параметров огромное множество их все нельзя знать наизусть. Далее в этом разделе будут приведены самые распространенные условия с примерами их использования. А далее в этой главе будут описаны два способа с помощью которых можно узнать написание параметра, которое не известно.

Онлайн-курс по Wireshark

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

7.2.1 Часто встречающиеся условия

L2-условия

eth.addr – MAC-адрес отправителя или MAC-адрес получателя;

eth.src – MAC-адрес отправителя;

eth.dst – адрес получателя;

eth.type – поле EtherType;

vlan – наличие VLAN-заголовка;

vlan.id – VLAN ID;

vlan.etype – поле TPID;

frame.len – размер кадра.


L3-условия

ip – наличие IPv4-заголовка;

ip.addr – IPv4-адрес отправителя или IPv4-адрес получателя;

ip.src – IPv4-адрес отправителя;

ip.dst – IPv4-адрес получателя;

ip.host – тоже, что и ip.addr;

ip.src_host – тоже, что и ip.src;

ip.dst_host – тоже, что и ip.dst;

ip.proto – номер протокола, который инкапсулирован в IPv4-пакет;

ip.flags.df – значение флага Do not fragment в IPv4-пакете;

ip.ttl – значение поля TTL в IPv4-пакете;

ip.len – размер IPv4-пакета;

ipv6 – наличие IPv6-заголовка;

ipv6.addr – IPv6-адрес отправителя или IPv4-адрес получателя;

ipv6.src – IPv6-адрес отправителя;

ipv6.dst – IPv6-адрес получателя;

ipv6.host – тоже, что и ip.addr;

ipv6.src_host – тоже, что и ip.src;

ipv6.dst_host – тоже, что и ip.dst;


L4-условия

tcp – наличие TCP-заголовка;

tcp.port – TCP-порт отправителя или получателя;

tcp.srcport – TCP-порт отправителя;

tcp.dstport – TCP-порт получателя;

tcp.flags.syn – значение флага SYN;

tcp.flags.fin – значение флага FIN;

udp – наличие UDP-заголовка;

udp.port – UDP-порт отправителя или получателя;

udp.srcport – UDP-порт отправителя;

udp.dstport – UDP-порт получателя;

udp.len – размер UDP-дейтаграммы;


Условия, не подразумевающие наличие параметра

vlan – наличие VLAN-заголовка;

ip – наличие IPv4-заголовка;

ipv6 – наличие IPv6-заголовка;

ospf – наличие OSPF-заголовка;

mpls – наличие MPLS-заголовка;

gre – наличие GRE-заголовка;

bgp – наличие BGP-заголовка;

icmp – наличие ICMP-заголовка;

stp – наличие STP-, RSTP- или MSTP-заголовка;

igmp – наличие IGMP-заголовка.


7.2.2 Примеры использования условий

eth.addr == 18:fd:74:b4:a0:ed

eth.type == 0x0800

frame.len == 55

ip.src == 10.11.12.139

ip.flags.df == True

tcp.srcport == 56388

udp.port == 53

frame.offset_shift == 0.000000000

tcp.window_size == 63489


Регистр

Регистр в котором указываются выражения может играть роль.

7.3 Параметры

Параметры, которые указываются для уточнения условий, могут быть следующих видов:

  • число;
  • логические «да» и «нет»;
  • MAC-адрес;
  • IPv4-адрес;
  • IPv6-адрес;
  • текст;
  • дата и время.


7.3.1 Число

Число может быть двоичным, восьмеричным, десятичным или шестнадцатеричным.

Пример: frame.len == 188.


7.3.2 Логические «да» и «нет»

Логические «да» и «нет» могут быть записаны в виде знаков 1 и 0, либо в текстовом виде «True» и «False».

Примеры:

  • tcp.flags.syn == 1,
  • tcp.flags.syn == True.


7.3.3 MAC-адрес

MAC-адрес указывается в шестнадцатеричном виде, буквы могут быть записаны как в нижнем, так и в верхнем регистре, а в качестве разделителя могут быть использованы двоеточие (:), точка (.) или тире (-).

Примеры:

  • eth.dst == ff:ff:ff:ff:ff:ff,
  • eth.dst == ff-ff-ff-ff-ff-ff,
  • eth.dst == ffff.ffff.ffff,
  • eth.dst == FFFFFFFFFFFF.


7.3.4 IPv4-адрес

IPv4-адрес указывается в десятичном виде. Может быть указан как IPv4-адрес отдельного узла, так и адрес IPv4-сети. Для указания адреса сети надо добавить маску сети.

Примеры:

  • ip.addr == 10.11.12.100,
  • ip.addr == 10.11.12.100/24.


7.3.5 IPv6-адрес

IPv6-адрес указывается в шестнадцатеричном виде. Может быть указан как IPv6-адрес отдельного узла, так и адрес IPv6-сети. Для указания адреса сети надо добавить маску сети.

Пример: ipv6.addr == ::1.


7.3.6 Текстовая строка

Строка — это последовательность произвольных символов в кодировке ASCII. Знаки в строках могут указываться в:

  • «обычном» человеко-читаемом виде,
  • «шестнадцатеричном» виде,
  • «восьмеричном» виде,
  • виде «сырых» строк.

«Обычные» строковые знаки приводятся в двойных кавычках. В шестнадцатеричном виде строки приводятся в формате \xhh, где h — это шестнадцатеричные символы. В восьмеричном виде строки приводятся в формате \doo формате, где o — это восьмеричные символы. «Сырые» строки начинаются с r или R и обрабатывают обратную косую черту как буквальный символ.

Примеры:

  • http.request.uri == "https://www.wireshark.org/",
  • dns.qry.name contains "www.\x77\x69\x72\x65\x73\x68\x61\x72\x6b.org",
  • http.user_agent matches r"\(X11;".


7.3.7 Дата и время

Дата

Дата указывается в двойных кавычках в одном из двух форматов:

  • "ГГГГ-ММ-ДД",
  • "МЕС ДАТА, ГОД".

Во втором случае названия месяцев должны быть приведены на английском языке, независимо от языка, используемого в интерфейсе Wireshark.

Примеры:

  • frame.time > "2024-02-24",
  • frame.time > "Feb 24, 2024".


Время

Время указывается в следующем формате: ЧЧ-ММ-СС.123456. При этом в зависимости от ситуации могут указываться:

  • только секунды или секунды с долями секунды,
  • часы минуты и секунды,
  • часы и минуты

Примеры:

  • frame.time_delta < 1702815671.195654,
  • frame.time_delta_displayed == 0.049509,
  • frame.time == 12:21:11,195654.


Совместное указание даты и времени

Если дата и время должны быть указаны вместе, то они должны быть указаны в кавычках в одном из двух форматов:

  • "ГГГГ-ММ-ДД ЧЧ-ММ-СС.123456+UTC".
  • "МЕС ДАТА, ГОД ЧЧ-ММ-СС.123456+UTC".

Дополнительно после указания времени возможно указание часового пояса.

Примеры:

  • frame.time > "2024-02-24 12:34:56.378195000+0300";
  • frame.time > "2024-02-24 12:34:56.378195000";
  • frame.time > "2024-02-24 12:34:56";
  • frame.time > "2024-02-24 12:34".


7.4 Операторы сравнения

Операторы отбора, используемые в выражениях экранного фильтра Wireshark
Описание Обозначение № 1 Обозначение № 2 Обозначение № 3 Пример
Равно, если есть совпадение хотя бы в одном возможном месте == eq any_eq ip.src == 10.0.0.5
Равно, если есть совпадение во всех возможных местах === all_eq ip.src === 10.0.0.5
Неравно, если есть совпадение во всех возможных местах != ne all_ne ip.src != 10.0.0.5
Неравно, если есть совпадение хотя бы в одном возможном месте !== any_ne ip.src !== 10.0.0.5
Больше чем > gt frame.len > 10
Меньше чем < lt frame.len < 128
Больше или равно >= ge frame.len ge 0x100
Меньше или равно <= le frame.len <= 0x20
В значении условия содержится contains sip.To contains "a1762"

udp contains 81:60:03

В значении условия содержится Perl-совместимое регулярное выражение ~ matches http.host matches "acme\\.(org|com|net)"
Set Membership in http.request.method in {"HEAD", "GET"}. See “Membership Operator” below.


7.4.1 Разница между операторами «==» и «===»

Допустим в файле захвата есть UDP-дейтаграммы, в которых использует UDP-порт 50432. Если в качестве выражения экранного фильтра указать udp.port == 50432, то будут отображены любые дейтаграммы у которых или в качестве порта отправителя, или в качестве порта получателя будет указан порт 50432. А если указать udp.port === 50432, то не будет отображено ничего, т.к. использование оператора «===» подразумевает, что и порт отправителя и порт получателя одновременно должны иметь значение 50432. Если же указать udp.srcport === 50432, то будут отображены все пакеты у которых порт отправителя равен 50432, т.к. порт отправителя всего один.


7.4.2 Разница между операторами «!=» и «!==»

Допустим в файле захвата есть IP-пакеты:

  • пакет № 1 с IP-адресом отправителя 10.11.12.139 и IP-адресом получателя 77.88.8.1;
  • пакет № 2 с IP-адресом отправителя 77.88.8.1 и IP-адресом получателя 10.11.12.139;
  • пакет № 3 с IP-адресом отправителя 10.11.12.47 и IP-адресом получателя 77.88.8.1.

Если в качестве выражения экранного фильтра указать ip.host !== 10.11.12.139, то будут отображены все три пакета, т.к. в любом из них хотя бы один из IP-адресов не равен адресу 10.11.12.139. А если указать ip.host != 10.11.12.139, то будет отображен только пакет № 3, т.к. только у него оба IP-адреса не равны 10.11.12.139. Если же указать ip.src_host != 10.11.12.139, то будут отображены пакеты № 2 и № 3, т.к. IP-адрес отправителя всего один и у этих двух пакетов он не равен 10.11.12.139.

Онлайн-курс по Wireshark

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

7.5 Способы получения неизвестных условий и автоматизация созданий выражений

Как уже было сказано ранее т.к. параметров огромное множество их все нельзя знать наизусть. Получить готовое простое выражение Wireshark, состоящее из одного параметра и одного условия можно несколькими способами.


7.5.1 Получение условия с помощью эталонного кадра

Можно использовать дамп, содержащий кадр с нужным параметром. Для этого надо выбрать нужны параметр и в контекстно меню этого параметра последовательно выбрать КопироватьВ качестве фильтра.


Получение выражения экранного фильтра Wireshark на основе информации из кадра Получение выражения экранного фильтра Wireshark на основе информации из кадра


7.5.2 Получение условия с помощью конструктора выражений

В Wireshark имеется инструмент для создания выражений экранного фильтра. Его можно вызывать выбрав в главном меню АнализПоказать фильтр отображения. После выбора откроется диалоговое окно «Выражение фильтра отображения» с интуитивно понятным интерфейсом в котором надо будет последовательно выбирать протоколы, поля протоколов, операторы сравнения и указывать значения параметров.

Конструктор выражений экранного фильтра Wireshark Конструктор выражений экранного фильтра Wireshark


7.6 Уточнение условий отбора

7.6.1 Поиск на основе части данных

Формат записи

Wireshark позволяет выбирать заданные последовательности байтов или текстовых строк. Для этого сразу после указания условия без пробела надо в квадратных скобках ([ ]) указать идентификатор интересующей последовательности.

Возможные следующие форматы записей:

[A:B] – B байт начиная с байта номер A.

[A-B] – байты с номерами от A до B, включая A и B.

[:B] – B байт начиная с байта номер ноль. Запись равносильная записи [0:B].

[A:] – все байты до самого конца идущие после байта A, включая байт A.

[A] – байт с номером A.

[-A:B] – B байт начиная с байта A (включая байт A) с учетом отсчета нумерации с конца.

[-A:A] – последние A байт.

Точка отсчета

Отсчет байт с начала последовательности начинается с номера ноль, а отсчет байт с конца последовательности начинается с номера один.


Примеры

Допустим у нас есть MAC-адрес: 64:cc:22:09:5e:ba. Этот MAC-адрес, как и любой другой MAC-адрес, имеет размер 6 байт (48 бит). Один байт данных может быть представлен двумя шестнадцатеричными цифрами. Важно помнить, что отсчет байт начинается с номера ноль.

eth.src[1:3] == cc:22:09 – MAC-адрес отправителя у которого три байта, начиная с байта номер один равны cc:22:09.

eth.src[2-4] == 22:09:5e – MAC-адрес отправителя у которого байты от второго до четвертого, включая второй и четвертый равны 22:09:5e.

eth.src[:3] == 64:cc:22 – MAC-адрес отправителя у которого три байта начиная с байта ноль (т.е. байты 0, 1 и 2) равны 64:cc:22.

eth.src[2:] == 22:09:5e:ba – MAC-адрес отправителя у которого байты от второго (включая второй) и до конца (т.е. байты 2, 3, 4 и 5) равны 22:09:5e:ba.

eth.src[5] == ba – MAC-адрес отправителя у которого пятый байт равен ba.

eth.src[-4:2] == 22:09 – MAC-адрес отправителя у которого два байта с учетом отсчета начиная с четвертого байта с конца равны 22:09.

eth.src[-2:2] == 5e:ba – MAC-адрес отправителя у которого последние два байта равны 5e:ba.


Примеры текстовых записей:

http.content_type[0:4] == "text",

smpp.message_text[:10] == "Абвгдеёжзи".


Другие примеры:

frame[-4:4] == 0d:0a:0d:0a,

frame[-4:] == 0d:0a:0d:0a.


7.6.2 Поиск с учетом того, что искомые данные имеются более чем в одном заголовке

Один и тот же параметр может находиться более, чем в одном заголовке. В таком случае может потребоваться уточнить в каком именно из заголовков надо искать заданный параметр. Номер заголовка в котором встречается заданный параметр указывается после знака #, который приводится без пробела сразу после условия. Если необходимо указать диапазон заголовков, то это делается также после знака решетка, а сам диапазон указывается в квадратных скобках в формате [A-B].

Примеры:

ip.addr#2 == 172.16.30.40 – поиск заданного IP-адреса должен выполняться во втором заголовке в которых используются IPv4-адреса.

ip.addr#[2-4] == 172.16.30.40 – поиск заданного IP-адреса должен выполняться во втором, третьем и четвертом заголовке в которых используются IPv4-адреса.


7.6.3 Поиск «сырых» данных

Если перед названием поля поставить символ «@», то сравнение будет проводиться с «сырыми» (необработанными) данными пакета.

Во время анализа пакетов, содержащих текстовые данные сравнение выполняется исходя из того, что использовалась кодировка UTF-8. При использовании в исходных данных другой кодировки возможны ошибки декодирования в результате которых будут использоваться символы замены.


Примеры:

browser.comment == "string is ����" – строка с ошибками декодирования,

@browser.comment == 73:74:72:69:6e:67:20:69:73:20:aa:aa:aa:aa – аналогичая строка в которой будут искаться необработанные данные.


В качестве примера можно привести протокол SMPP (Short Message Peer-to-Peer), у которого есть поле в виде байтов, smpp.message, и строковое поле, smpp.message_text, относящиеся к одним и тем же данным. Если первые четыре символа сообщения представляют собой строку «Text» в кодировке UTF-16, все следующие фильтры, по сути, будут искать одну и туже информацию:

smpp.message[:8] == 00:54:00:65:00:73:00:74,

smpp.message[:8] == "\x00T\x00e\x00s\x00t",

smpp.message_text[:4] == "Test",

smpp.message_text[:4] == "\x54\x65\x73\x74",

@smpp.message_text[:8] == 00:54:00:65:00:73:00:74,

@smpp.message_text[:8] == "\x00T\x00e\x00s\x00t".


7.6.4 Функции

Описание

Функция экранного фильтра Wireshark – это уточнение, добавляемое к условию выражения экранного фильтра Wireshark, которое расширяет стандартные возможности фильтра.

Ключевая особенность функции заключается в ее способности обрабатывать и модифицировать данные перед сравнением или анализом. Например, функции могут изменять формат данных (преобразование регистра букв), измерять параметры данных (определение длины строки), а также выполнять другие действия.

Возможно использование следующих функций: upper, lower, len, count, string, max, min и abs. Их описание приведено далее.

Функции upper и lower

upper – функция, используемая для преобразования всех букв в указанном поле пакета в верхний регистр. Она используется если нужные данные могут быть представлены с использованием обоих регистров.

lower – функция, используемая для преобразования всех букв в указанном поле пакета в нижний регистр. Она используется если искомые данные могут быть представлены с использованием обоих регистров.

Например, надо найти все пакеты в которых указан веб-сервер Apache, независимо от того, как именно написано это слово (например, "apache", "Apache", "APACHE" и т.д.). Для этого может быть использовано выражение upper(http.server) == "APACHE", в котором за счет использования функции «upper» все варианты написания "Apache" будут унифицированы и сравнены в верхнем регистре. Аналогично можно использовать выражение lower(http.server) == "APACHE".


Функция len

len – функция, используемая для вычисления длины заданного поля.

Функция может быть полезной для определения размера данных. Например с помощью выражения, len(http.request.uri) > 100 можно отфильтровать HTTP-запросы с URI длиннее 100 символов.


Функция count

count – функция, используемая для вычисления количество элементов в поле.

Функция может быть полезной, если искомые данные содержатся несколько раз. Например, в GRE-пакете есть два поля IP-адрес отправителя и два поля IP-адрес получателя. По одному IP-адресу каждого вида в IP-заголовке и по одному в GRE-заголовке. С помощью выражения count(ip.src) > 1 можно отобрать пакеты у которых имеется более одного IP-адреса отправителя.


Функция string

sting – функция, используемая для преобразования не строковых данных в строки.

Функция может быть полезной, если необходимо использовать строковые условия отбора, такие как contains, matches и др.

Например надо сделать отбор на основе IP-адресов отправителя, которые не относятся к единому диапазону адресов и все эти адреса попадают под следующие условия:

  • 1-ый октет: 10;
  • 2-ой октет: 10, 11, 12, 21, 23, 25, 30, 31, 32, 34, 37, 38, 39;
  • 3-ий октет: от 10 до 99;
  • 4-ый октет: от 0 до 255.

Эту задачу можно решить создав условие в котором будет перечислено множество небольших диапазонов адресов. Но такое выражение будет очень громоздким. Также эту задачу можно решить с помощью приведенного далее выражения. В нем учитываются не диапазоны IP-адресов (числа), а символы и их комбинации, которые хоть являются числами, но с точки зрения выражения являются именно набором строковых символов.

string(ip.src) matches r"^10\.(1[0-2]|2[1,3,5]3[0-2,4,7-9])\.[0-9]{2}\.[0-9]{1,3}".


Функции max и min

max – функция, используемая для поиска максимального значения.

min – функция, используемая для поиска минимального значения.

Например, с помощью выражения max(tcp.srcport) < 20000 можно найти TCP-сегменты с самым большим номером порта отправителя с учетом того, что этот номер должен быть менее 20 000. Аналогичным образом работает и функция min.

ВАЖНО: в настоящий момент функция работает и, например, для приведенного выше примера будут отображены любые TCP-сегменты у которых номер порта отправителя имеет значение менее 20 000.


Функция abs

abs – функция, используемая для получения абсолютного (без учета знака) значения аргумента.


7.7 Одновременное использование разных условий и параметров

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

В выражениях экранного фильтра Wireshark возможно использование следующих логических операций: эквиваленция, инверсия, И, ИЛИ, а также исключающее ИЛИ.

Обозначение логических операций экранного фильтра Wireshark
Русскоязычное название Буквенный вариант записи Символный вариант записи Пример
Эквиваленция eq == ip.src eq 10.0.0.5
ip.src == 10.0.0.5
Инверсия ne !== ip.src ne 10.0.0.5

ip.src !== 10.0.0.5

И and && ip.src == 10.0.0.5 and tcp.flags.fin
ip.src == 10.0.0.5 && tcp.flags.fin
ИЛИ or ||
ip.src == 10.0.0.5 or ip.src == 192.1.1.1
ip.src == 10.0.0.5 || ip.src == 192.1.1.1
Исключающее ИЛИ xor ^^
tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29
tr.dst[0:3] == 0.6.29 ^^ tr.src[0:3] == 0.6.29


Важно знать булеву алгебру

Для того чтобы уметь писать выражения для фильтров захвата или экранных фильтров в Wireshark, нужно владеть знаниями по булевой алгебре. Соответственно, для продолжения знакомства с материалом рекомендуется изучить этот предмет по этой статье. Она рассчитана на изучение булевой алгебры с нуля. В статье приведено много простых и понятных примеров.


7.7.1 Сокращенная запись многократного указания эквиваленции

Wireshark дает возможность проверять, входит ли значение поля в определенный набор значений. Для этого после названия поля используется оператор «in», а затем в фигурных скобках {} указываются эти значения через запятую (in {A, B, C, D, E}). Также возможно указание диапазона значений. Для этого между начальным и конечным значением без пробелов ставятся две точки (in {A..B}). В том числе возможно и объединение перечисления и указания диапазонов (in {A, B..C, D, E..F}).

Примеры:

tcp.port in {80, 443, 8080} – TCP-порт отправителя или получателя имеет номер 80, 443 или 8080. Запись эквивалентна записи tcp.port == 80 || tcp.port == 443 || tcp.port == 8080.

tcp.port in {443, 4430..4434} – TCP-порт отправителя или получателя имеет номер 443 или номера от 4430 до 4434, включая оба этих номера. Запись эквивалентна записи tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434).

http.request.method in {"HEAD", "GET"}.

ip.addr in {10.0.0.5 .. 10.0.0.9, 192.168.1.1..192.168.1.9}.

frame.time_delta in {10 .. 10.5}.


7.8 Арифметические операторы

В выражениях Wireshark можно использовать арифметические операторы, которые описаны далее.

Текст подписи
Название Форма записи Описание
Отрицательное значение -A
Сложение A + B
Вычитание A - B
Умножение A * B
Деление A / B
Модуль A % B Остаток от деления A на B
Логическое И A & B Число, получившееся в результате выполнения операции «логическое И» для двоичного представления двух чисел. Для числа 12 (1100) и 5 (0101) результатом будет число 4 (0100).


Справа и слева от оператора пробелы могут как стоять, так и не стоять.

Пример одного и того же выражения с использованием пробелов и без них:

frame.cap_len < 14 + ip.hdr_len + tcp.hdr_len,

frame.cap_len < 14+ip.hdr_len+tcp.hdr_len.


Нюанс оператора вычитания

В некоторых случаях перед оператором вычитания (знак минус) обязательно должен стоять пробел. Пример в котором в зависимости от ситуации пробел обязателен и необязателен: frame.cap_len < 50-ip.hdr_len -tcp.hdr_len.


При написании выражений с арифметическими операторами возможно использование скобок. Скобки должны быть фигурными.

Пример: frame.cap_len < { 14 + ip.hdr_len + tcp.hdr_len } * 2.


7.9 Сравнение относительно параметров выделенного пакета

Существует способ делать отбор на основе данных из пакета, который выбран в графическом интерфейсе (GUI). Интересующий параметр из GUI в выражении экранного фильтра обозначается следующим образом: ${имя_поля}.

С помощью выражения tcp.dstport > ${tcp.srcport} можно отобрать все TCP-сегменты у которых номер порта получателя имеет значение большее, чем у номера порта отправителя TCP-сегмента, который выбран в GUI на момент применения выражения (нажатия клавиши Enter).


7.10 Изменение имен полей

По мере развития протоколов могут быть изменены их названия. Например, DHCP расширил и во многом заменил BOOTP, а TLS заменил SSL. Если диссектор протокола изначально использовал старые названия и поля протокола, разработчики Wireshark могут обновить его, используя новые названия и поля. В таких случаях для облегчения перехода на новые названия, как правило, добавляются псевдонимы из старого названия протокола в новое.

Например, вы все еще можете использовать старое название “bootp.type”, которое является эквивалентом “dhcp.type”. Но при его использовании Wireshark будет показывать предупреждение “"bootp" устарел”. Поддержка устаревших полей может быть удалена в будущем.


7.11 Совпадение название протоколов и содержимого полей

В некоторых случаях относительные выражения экранного фильтра Wireshark могут быть неоднозначными. Например, "fc" может быть интерпретировано как протокол Fibre Channel или как шестнадцатеричное число 0xFC. По умолчанию Wireshark интерпретирует значения, соответствующие зарегистрированным именам фильтров протоколов, как названия протоколов. Чтобы избежать путаницы, можно использовать дополнительный синтаксис: точка (.) перед значением означает название протокола, а двоеточие (:) — байтовый массив. Например, frame[10:] contains .fc означает поиск протокола, а frame[10] == :fc — поиск байтового массива. Это помогает разрешить синтаксическую неоднозначность в выражениях фильтра.​


7.12 Создание избранных фильтров

Если один и тот же фильтр используется часто, то его можно добавить в избранные фильтры. Добавлять и удалять избранные экранные фильтры можно в диалоговом окне «Фильтры отображения», которое можно вызывать выбрав в главном меню АнализПоказать фильтр отображения.

Диалоговое окно «Фильтры отображения» в Wireshark Диалоговое окно «Фильтры отображения» в Wireshark


Воспользоваться избранными фильтрами можно в меню закладок для фильтров захвата и отображения (). Это позволяет экономить время, поскольку не нужно заново вводить сложные фильтры, которые используются регулярно.

Онлайн-курс по Wireshark

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.