Wireshark предлагает простой, но мощный экранный фильтр, позволяющий создавать довольно сложные выражения фильтра. Вы можете сравнивать значения в пакетах, а также комбинировать простые выражения в более сложные выражения. Ниже разобраны конкретные примеры и описания.
Поля отображения фильтра
Каждое поле в панели сведений о пакете может использоваться как строка фильтра, это приведет к отображению только тех пакетов, где это поле существует. Например: строка фильтра: tcp отобразит все пакеты, содержащие протокол tcp.
Полный список всех полей фильтра доступен через пункт меню
Сравнение значений
Вы можете создавать фильтры отображения, которые сравнивают значения с использованием нескольких различных операторов сравнения.
Вы можете использовать английские и C-подобные выражения таким же образом, их можно даже смешивать в строке фильтра.
English | C | Пример — описание |
---|---|---|
eq | == | ip.src==10.0.0.5 — IP адрес отправителя равный 10.0.0.5. |
ne | != | ip.src!=10.0.0.5 — IP адрес отправителя не равный 10.0.0.5 (все кроме) |
gt | > | frame.len > 10 — Длинна больше чем 10 |
lt | < | frame.len < 128 — Длинна меньше чем 10 |
ge | >= | frame.len ge 0x100 — Больше или равно |
le | <= | frame.len <= 0x20 — Меньше или равно |
contains | dns.resp.name contains google — отображаем пакеты с DNS ответами, которые содержат «google» | |
matches | ~ | http.host matches yandex.ru — соответствует HTTP-пакетам, где заголовок HOST содержит yandex.ru |
bitwise_and | & | tcp.flags & 0x02 — побитовое сравнение поля |
Кроме того, все поля протокола имеют тип.
Типы полей фильтра отображения
- Беззнаковое целое Может быть 8, 16, 24, 32 или 64 бит. Вы можете выразить целые числа в десятичном, восьмеричном или шестнадцатеричном. Следующие фильтры отображения эквивалентны:
- Знаковое целое число
Может быть 8, 16, 24, 32 или 64 бит. Как и в случае беззнаковых целых чисел, вы можете использовать десятичные, восьмеричные или шестнадцатеричные.
Логический
Логическое поле присутствует в декодировании протокола, только если его значение истинно. Например,
tcp.flags.syn
присутствует и, следовательно, истинно, только если флаг SYN присутствует в заголовке сегмента TCP.Выражение фильтра `tcp.flags.syn` будет выбирать только те пакеты, для которых этот флаг существует, то есть сегменты TCP, в которых заголовок сегмента содержит Флаг SYN. Аналогичным образом, чтобы найти пакеты с маркером с маршрутизируемым маршрутом, используйте фильтр выражение `tr.sr`.
Ethernet-адрес
6 байтов, разделенных двоеточием (:), точкой (.) Или тире (-) с одним или двумя байтами между разделителями:
eth.dst == ff: ff: ff: ff: ff: ff
eth.dst == ff-ff-ff-ff-ff-ff
eth.dst == ffff.ffff.ffffАдрес IPv4
ip.addr == 192.168.0.1
Бесклассовая междоменная маршрутизация (CIDR) может использоваться для проверки, если адрес IPv4 находится в определенной подсети. Например, этот дисплей фильтр найдет все пакеты в сети 129.111:
ip.addr == 129.111.0.0/16
Адрес IPv6
ipv6.addr == ::1
Как и с адресами IPv4, адреса IPv6 могут соответствовать подсети.
Текстовая строка
http.request.uri == "https://nordd.ru/"
Объединение выражений
Вы можете комбинировать выражения фильтра в Wireshark, используя логические операторы
английский C-подобный Описание и пример and && Логические И. ip.src==10.0.0.5 and tcp.flags.fin or || Логический ИЛИ. ip.scr==10.0.0.5 or ip.src==192.1.1.1 xor ^^ Логический XOR. tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29 not ! Логическое НЕ. not llc […] См. «Оператор Slice» ниже. in См. «Оператор Membership» ниже. Оператор Slice
Wireshark позволяет вам выбирать подпоследовательности последовательности довольно продуманными способами.После метки вы можете поместить пару скобок [], содержащих список спецификаторов диапазона, разделенных запятыми.
eth.src [0: 3] == 00:00:83
В приведенном выше примере используется формат n: m для указания одного диапазона. В этом случае n — начальное смещение, а m — длина указанного диапазона.
eth.src [1-2] == 00:83
В приведенном выше примере используется формат nm для указания одного диапазона. В этом случае n является начальным смещением, а m является окончательным смещением.
eth.src [: 4] == 00: 00: 83: 00
В приведенном выше примере используется формат: m, который берет все от начала последовательности до смещения m. Это эквивалентно 0: m
eth.src [4:] == 20:20
В приведенном выше примере используется формат n:, который принимает все значения от смещения n до конца последовательности.
eth.src [2] == 83
В приведенном выше примере используется формат n для указания одного диапазона. В этом случае выбирается элемент в последовательности со смещением n. Это эквивалентно n: 1.
eth.src [0: 3.1-2 ,: 4.4 :, 2] == 00:00:83:00:83:00:00:83:00:20:20:83
Wireshark позволяет вам объединять отдельные диапазоны в списке, разделенном запятыми, для формирования составных диапазонов, как показано выше.
Оператор Membership
Wireshark позволяет вам проверять поле на вхождение в набор значений или полей. После имени поля используйте оператор in, а затем заданные элементы, окруженные фигурными скобками {}.
tcp.port in {80 443 8080}
Это можно считать оператором быстрого доступа, поскольку предыдущее выражение могло бы быть выражено как:
tcp.port == 80 || tcp.port == 443 || tcp.port == 8080
Набор значений также может содержать диапазоны:
tcp.port in {443 4430..4434}
простоt сокращение для tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434). Операторы сравнения обычно выполняются, когда какое-либо поле соответствует фильтру, и, таким образом, пакет с портами 80 и 56789 будет соответствовать этому альтернативному фильтру отображения, поскольку 56789 >= 4430 && 80 <= 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}
Функции
Язык фильтра отображения имеет ряд функций для преобразования полей.
Функция Описание upper Преобразует поле строки в верхний регистр. lower Преобразует строковое поле в нижний регистр. len Возвращает длину байта строки или байта. count Возвращает количество полей в кадре. Преобразует http.server в нижний регистр и ищет apache : lower(http.server) contains «apache».
Для того, чтобы найти HTTP запросы с длинным запросом URIs: len(http.request.uri) > 100. Обратите внимание, что lenфункция возвращает длину строки в байтах, а не символы.
Обычно IP-кадр имеет только два адреса (источник и адресат), но в случае ошибок ICMP или туннелирования один пакет может содержать еще больше адресов. Эти пакеты можно найти с помощью count(ip.addr) > 2.
Распространенная ошибка
Использование оператора ! = Для комбинированных выражений типа eth.addr, ip.addr, tcp.port и udp.port, вероятно, не будет работать должным образом.
Часто люди используют строку фильтра, чтобы отобразить что-то вроде ip.addr == 1.2.3.4 отображения всех пакетов, содержащих IP-адрес 1.2.3.4.
Затем они используют ip.addr != 1.2.3.4 для просмотра всех пакетов, не содержащих в нем IP-адрес 1.2.3.4. К сожалению, это результат не оправдывает ожидания.
Вместо этого это выражение будет даже верно для пакетов, где либо исходный, либо целевой IP-адрес равен 1.2.3.4. Причиной этого является то, что выражение ip.addr != 1.2.3.4 должно быть прочитано как «пакет содержит поле с именем ip.addr со значением, отличным от 1.2.3.4». Поскольку датаграмма IP содержит как источник, так и адрес назначения, выражение будет оцениваться как true, если хотя бы один из двух адресов отличается от 1.2.3.4.
Если вы хотите отфильтровать все пакеты, содержащие IP-датаграммы, или с IP-адреса 1.2.3.4, то правильный фильтр будет таким, !(ip.addr == 1.2.3.4)как он читает: «Покажите мне все пакеты, для которых это неверно», или, другими словами, » отфильтровать все пакеты, для которых нет вхождений поля с именем ip.addr со значением 1.2.3.4 «.
ip.len 1500
ip.len 02734
ip.len 0x5dc