Глубокое понимание методов фильтрации Wireshark: полный анализ синтаксиса, выражений, операторов и устранение распространенных неполадок.
Глубокое понимание методов фильтрации Wireshark: полный анализ синтаксиса, выражений, операторов и устранение распространенных неполадок.

1. Предисловие

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

Эта статья состоит из двух частей. В первой части представлены методы фильтрации полей Wireshark, а вторая часть посвящена различным сценариям применения для анализа случаев. Wireshark поддерживает более 3000 протоколов и более 240 000 полей фильтров. Поэтому в этой статье невозможно охватить каждый из них. Однако метод фильтрации тот же. Фильтруйте то, что необходимо.

Ни одно учебное руководство не может превзойти официальную документацию. Читателям, желающим получить более глубокое и полное представление о Wireshark после прочтения этой статьи, настоятельно рекомендуется прочитать официальное руководство по документации:

имя файла

Ссылка на документацию

wireshark-filter(4) Manual Page

Wireshark User’s Guide

Страница загрузки документа

в то же время,Вы можете существовать в Wireshark, используя команду фильтра.,То же самое можно использовать и в существовании Tshark.,Tshark — официальный компонент Wireshark.,Можно понимать как CLI-версию Wireshark.,Wireshark и Tshark — это инструменты, основанные на библиотеке libpcap.,Используйте один и тот же синтаксис фильтрации,Это называется pcap-фильтр. Чтобы узнать о случаях использования Tshark,Вы можете обратиться к авторуЭта статья

2. Методы фильтрации, операторы, выражения

2.1 Любое поле может стать условием фильтра

2.1.1 Перетащите мышь, чтобы отфильтровать любое поле

После раскрытия сообщения любое поле, по которому вы щелкаете мышью, может использоваться в качестве условия фильтрации. Например, при щелчке мышью по полю «Порядковый номер» в левом нижнем углу отобразится соответствующий синтаксис фильтрации поля:

Вам даже не нужно вводить это условие фильтра вручную, просто перетащите его с помощью мыши в верхнее поле фильтра:

То же самое касается любых других полей.

2.1.2 Просмотр и поиск полей фильтра

существовать Вид --> Внутренности --> Поддерживаемые протоколы (Поддерживаемые Протоколы), чтобы просмотреть все поддерживаемые протоколы, введите в поле поиска поле, в котором вы хотите выполнить поиск:

Будут отображены все соответствующие поля протокола. Даже если подполе протокола соответствует содержимому поиска, оно будет отображено. Например, при поиске DNS будьте осторожны и не нажимайте Enter. Через несколько секунд будут выведены результаты:

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

2.2 Логические операторы

Оператор

C-образный стиль

описывать

Пример

and

&&

логическое И

ip.src==10.0.0.5 and tcp.flags.fin==1

or

||

логичный или

ip.src==10.0.0.5 or ip.src==192.1.1.1

xor

^^

Логическое исключающее ИЛИ

tr.dst0:3 == 0.6.29 xor tr.src0:3 == 0.6.29

not

!

логическое отрицание

! udp

...

Не участвует

дочерний заказ/кусочек Оператор

eth.src:4 == 00:00:83:00

in

Не участвует

Установить членов коллекции

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

Примечание. Логический оператор чувствителен к регистру и должен быть в нижнем регистре. Для или используйте C-образный. Как написать стиль.

Три основные операции AND, или и Non не будут здесь подробно описываться.,Вы можете обратиться к Примеру в приведенной выше таблице.,В основном говорим о различияхили、дочерний заказ、Коллекция из трех типов Оператора.

2.2.1 Исключающее ИЛИ (исключающее ИЛИ)

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

Например, следующее выражение:

Язык кода:bash
копировать
ip.addr == 192.168.1.1 xor ip.addr == 10.10.0.100

Фильтровать пакеты с IP-адресом 192.168.1.1 или пакеты с ip.addr 10.10.0.100, но не может одновременно соответствовать обоим условиям, то есть интерактивные запросы между 192.168.1.1 и 10.10.0.100 не будут сопоставлены. Да, но. их взаимодействие с другими IP-адресами может нормально совпадать.

2.2.2 Дочерний заказ (...)

Аналогично использованию массива или использованию срезов в Python.

Например, в следующем примере метод HTTP-запроса фильтруется, а первые три символа представляют собой сообщения GET:

Язык кода:bash
копировать
http.request.method[0:3]=="GET"

Или первые три цифры указанного исходного Mac-адреса могут быть:

Язык кода:bash
копировать
eth.src[0-2] == 38:22:d6

2.2.3 Установить (внутри)

существуют В зависимости от условий фильтра,Пока он соответствует элементам в коллекции,Все совпадает.

Фильтровать несколько IP-адресов одновременно, что может быть:

Язык кода:bash
копировать
ip.addr in {192.168.1.99,10.1.1.254,10.2.1.253}

В сочетании с вышеизложенным и логикой Оператора фильтруются только запросы SYN:

Язык кода:bash
копировать
ip.addr in {192.168.1.99,10.1.1.254,10.2.1.253} && tcp.flags.syn==1 && tcp.flags.ack==0

Таким же образом, если вы хотите фильтровать пакеты с нескольких портов одновременно и не получать пакет второго подтверждения SYN-ACK узла в потоке TCP, вы можете сделать следующее:

Язык кода:bash
копировать
tcp.port in {80,8080,443} && tcp.completeness.syn-ack==0

Вы можете видеть, что только порты 443 и 8080 соответствуют условиям фильтрации. Тестируемый одноранговый сервер не прослушивал эти два порта, поэтому он ответил RST-ACK.

Использование наборов также может быть непрерывным, например фильтрация порта 443 и портов 4430~4434:

Язык кода:bash
копировать
tcp.port in {443, 4430..4434}

Или диапазон IP-адресов:

Язык кода:bash
копировать
ip.addr in {10.0.0.5 .. 10.0.0.9, 192.168.1.1..192.168.1.9}

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

Оператор

Псевдоним

C-образный стиль

описывать

Пример

eq

any_eq

==

равный

ip.src == 10.0.0.5

ne

all_ne

!=

не равен

ip.src != 10.0.0.5

all_eq

===

конгруэнтный

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"

matches

~

Сопоставьте протокол или текстовое поле с помощью регулярного выражения Perl (PCRE)

http.host matches "acme\.(org|com|net)"

Выше равный, не равный, больше, чем, меньше, чем, больше, чемравный, меньше, Вместо того, чтобы знакомить с базовыми Операторами, такими как чемравный, мы представим несколько необычных, но очень полезных Операторов.

2.3.1 Конгруэнтность (===)

Разница между равным (==) и конгруэнтным (===):

  • == — свободное сравнение, если совпадает одно значение (любое, если больше одного);
  • === — строгое сравнение, все возможные значения должны совпадать (все, если их больше одного).

Например, в следующем примере фильтруются запросы с номером TCP-порта 80:

Язык кода:bash
копировать
tcp.port == 80 # Как написать равенство
tcp.port === 80 # Как написать конгруэнтный

тот же пакет,использоватьравный(==)можно отфильтровать Порт источника и назначение — 80 сообщений,использоватьконгруэнтный(===)будет соответствовать источнику и назначениюиз Портыдля80изсообщение。

Поскольку порты источника и назначения,После того, как вышеуказанные условия фильтра записаны,,Все они относятся к полям, которые необходимо проверить в tcp.port.,и=====Сопоставьте и отфильтруйте в соответствии с их неплотностью.。

Например, в следующем примере IP-адрес источника и назначения фильтрации должен находиться в сегменте сети 10.0.0.0/8:

Язык кода:bash
копировать
ip.addr === 10.0.0.0/8

Приведенное выше соответствующее утверждение предусматривает, что IP-адреса источника и назначения должны находиться в сегменте сети 10, что эквивалентно:

Язык кода:bash
копировать
ip.src==10.0.0.0/8 && ip.dst==10.0.0.0/8

2.3.2 Недостаточность и т.п. (!==)

Как следует из названия, взяв в качестве примера указанный выше отфильтрованный номер порта, если одно из отфильтрованных полей не равно, то условие выполнено.

Например, следующее условие фильтра:

Язык кода:bash
копировать
tcp.port !== 80

контрастравный(==),Нетконгруэнтный(!==)Исключается ситуация, когда порты источника и назначения оба80ситуация,рама как размер,Порт источника и назначения,Может удовлетворить только один — 80.

2.3.3 содержит

Если вы хотите отфильтровать, содержит ли поле указанную строку, вы можете использовать contains.

Например, в TCP-соединении для запросов, содержащих строку «изображение», метод фильтрации может быть следующим:

Язык кода:bash
копировать
tcp contains "tcp"

Конечно, вы можете заменить tcp любым протоколом или полем, например: udp содержит, Frame содержит, http содержит. Обязательным типом данных является строка, поэтому tcp.port и ip.addr не могут использовать contains.

Например, если имя хоста фильтрации http-запросов — youtube.com, оно может быть:

Язык кода:bash
копировать
http.host contains "youtube.com"

Фильтрация DNS-запросов, содержащих cloud.tencent.com, может осуществляться следующим образом:

Язык кода:bash
копировать
dns.qry.name contains "cloud.tencent.com"

Или вы можете напрямую фильтровать данные полезной нагрузки, например, nping инициирует обнаружение протокола UDP и отправляет тестовую строку «test»:

Язык кода:bash
копировать
nping --udp -p 2115 --data-string "test" 192.168.1.72

Сервер слушает порт 2115 udp и отвечает на то, что получает:

Язык кода:bash
копировать
socat -v udp-l:2115,fork exec:'/bin/cat'

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

Язык кода:bash
копировать
udp contains "test"
udp.payload contains "test"

2.3.4 Матчи

Режим сопоставления поддерживает регулярное выражение Perl (PCRE), соответствующее протоколу или текстовому полю, которое является более гибким, чем содержит.

Пример 1,Фильтровать запросыURIСодержитmsfнитьиз.comвеб-сайт:

Язык кода:bash
копировать
http.request.full_uri matches ".*msf[a-z]+.com"

Пример 2,Фильтрация клиентов при подтверждении TLS Доменное имя на этапе приветствия должно начинаться с символа v и заканчиваться на microsoft.com:

Язык кода:bash
копировать
tls.handshake.extensions_server_name ~ "^v.*microsoft.com$"

Пример 3,Фильтрация в протоколе DNS,Соответствующие сообщения с трех веб-сайтов:

Язык кода:bash
копировать
dns matches "windows.com|microsoft.com|bing.com" Можно написать #dns как dns.qry.name.

кроме,ты можешьиспользоватьбыстрая клавишаCtrl + Fчтобы открыть окно поиска,Поддержка обычного, шестнадцатеричного, строкового, фильтра,И вы можете установить, чувствителен ли регистр,Поиск не поможет вам фильтровать сообщения,Искать каждые,В порядке сверху вниз,Каждый раз находится кадр данных, соответствующий требованиям.

2.4 Иерархические операторы (многоуровневая фильтрация в сценариях инкапсуляции туннеля)

Иерархия Оператор(#)за которым следует десятичное число,Поля могут быть ограничены определенным уровнем в стеке протоколов.

2.4.1 Сценарий VXLAN

Например, следующий пакет VXLAN инкапсулирует внутренний IP-заголовок через UDP, а также IP-заголовок, который поставляется с самим пакетом, поэтому существует два уровня: внутренний и внешний:

В настоящее время я хочу отфильтровать IP-адрес внутреннего уровня (второй уровень).,Затем вы можете добавить уровень Оператор#2,Например, отфильтруйте пакеты с внутренним IP-адресом 10.120.9.130.,И порт назначения TCP составляет 51801 пакет.,Это можно написать так:

Язык кода:txt
копировать
ip.dst#2 == 10.120.9.130 && tcp.dstport == 51801

Если вы хотите отфильтровать исходный IP-адрес первого уровня, вы можете использовать ip.src по умолчанию или добавить # 1. В сочетании с совпадающими символами, упомянутыми выше, внешний источник и пункт назначения должны находиться в сегменте сети 10. Вы можете. да:

Язык кода:txt
копировать
ip.src#1 == 10.120.9.130 && tcp.dstport == 51801 && ip.addr#2 === 10.0.0.0/8

2.4.2 Сценарий GRE

Инкапсуляция GRE такая же. Например, в следующем сообщении GRE также инкапсулирует уровень IP-заголовка, а также IP-заголовок, который поставляется с исходным сообщением, поэтому существует два уровня интрасети:

В сочетании с упомянутым выше соответствием Оператор(~)иконгруэнтный Оператор(===),Отфильтруйте внешние IP-адреса источника и назначения, чтобы они находились в сегменте сети 10, или начните с сегмента сети 11.,В то же время внешний IP-адрес источника и IP-адрес назначения находятся в сегменте сети 10.,Тогда это может быть:

Язык кода:txt
копировать
string(ip.addr) ~ "^10|^11" && ip.addr#2 === 10.0.0.0/8

Сюда кладем внешний слойip.addrтип данных переданstring()функция Конвертироватьдля Понятнонить,Затем сопоставьте регулярное выражение, сопоставив Оператор.

2.4.3 Сценарий IPIP

То же самое касается IPIP, который разделен на внутренние и внешние IP-заголовки. Структура следующая:

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

Язык кода:bash
копировать
ip.proto == 4

Из синтаксиса фильтрации нетрудно увидеть, что инкапсуляция IPIP ( IP Encapsulation within IP) находится в протоколе № 4.,Числовой порядковый номер, соответствующий протоколу,Можно обратиться кОрганизационная документация IANA。фильтрприезжатьIPIPсообщениеназад,Далее заголовки IP на разных уровнях можно использовать для фильтрации пакетов, соответствующих требованиям.

Например, чтобы отфильтровать запросы, внутренний IP-заголовок которых содержит 10.0.0.2 и является записью DNS A, это может быть:

Язык кода:txt
копировать
ip.proto == 4 && ip.addr#2 == 10.0.1.4 && dns.qry.type == 1

2.5 Функциональный фильтр класса преобразования

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

функция

описывать

upper

Преобразовать строковое поле в верхний регистр

lower

Преобразовать строковое поле в нижний регистр

len

Возвращает длину строкового или байтового поля в байтах.

count

Возвращает количество вхождений поля в кадр.

string

Преобразовать нестроковое поле в строку

vals

Преобразование значения поля в его строку значения (если есть)

dec

Преобразовать целочисленное поле без знака в десятичную строку

hex

Преобразовать целочисленное поле без знака в шестнадцатеричную строку

max

Возвращает максимальное значение параметра

min

Возвращает минимальное значение параметра

abs

Возвращает абсолютное значение параметра

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

2.5.1 Функция Upper()/Lower()

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

Например, чтобы отфильтровать поле сервера заголовка HTTP-ответа для Apache, это может быть:

Язык кода:bash
копировать
lower(http.server) ~ "apache"

Отфильтруйте метод HTTP-запроса как POST или GET:

Язык кода:bash
копировать
upper(http.request.method) ~ "post|get"

2.5.2 функция len()

len()функция вернет размер поля в байтах,Поэтому его можно использовать вместе с Оператором.,Отфильтруйте пакеты, поля которых соответствуют требованиям к размеру.

Фильтрация поля URI заголовка http. Сообщения размером больше или равными 10 байтам могут быть:

Язык кода:bash
копировать
len(http.request.uri) >= 10

Фильтруйте пакеты с именами хостов HTTP, превышающими или равными 20 байтам:

Язык кода:bash
копировать
len(http.host) >= 20

2.5.3 функция string()

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

Например, чтобы отфильтровать IP-адреса, начинающиеся с сегмента сети 10 или с сегмента сети 23, это может быть:

Язык кода:bash
копировать
string(ip.addr) ~ "^10|^11"

Фильтровать нечетные кадры, т.е. кадры, заканчивающиеся на 1/3/5/7/9:

Язык кода:bash
копировать
string(frame.number) ~ "[13579]$"

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

Язык кода:bash
копировать
string(tcp.seq_raw) ~ "[13579]$" && tcp.flags.syn==1 && tcp.flags.ack==0

Сопоставить IP-адреса, оканчивающиеся на 255 в IP-адресе назначения (от 172,16 до 172,31):

Язык кода:bash
копировать
string(ip.dst) matches r"^172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]{1,3}\.255"

2.5.4 Функции max(), min()

Функции max() и min() принимают любое количество параметров одного типа и возвращают наибольший/наименьший параметр в наборе соответственно.

Фильтруйте TCP-порт источника и порт назначения, а максимальное количество пакетов не может превышать 1024:

Язык кода:bash
копировать
max(tcp.srcport,tcp.dstport) <= 1024

Фильтровать пакеты с портом источника TCP + портом назначения, большим или равным 1024:

Язык кода:bash
копировать
min(tcp.srcport+tcp.dstport) >= 1024

2.6 Опорное поле/динамическая фильтрация

2.6.1 Ссылка на одну переменную

формадля${proto.field}из Выражениедля Поле Цитировать。其ценить从鼠标选приезжатьизв текущем кадреизсоответствующий Полечитать。это сборкадинамический фильтризметод。

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

Язык кода:bash
копировать
dns.a # Смысл этого оператора заключается в фильтрации поля адреса в ответном сообщении DNS.

Запись разрешения, возвращаемая ответом DNS первого кадра, следующая: IP-адрес 10.85.15.101.

После выполнения вышеуказанного действия,Wireshark действительно разместил указанный выше IP-адрес,Ссылка на задание дана${dns.a},На данный момент мы процитируем это,Фильтровать http-запросы,иIP-адрес назначениядля我们刚刚鼠标点选Цитироватьиз Полеценить:

Язык кода:bash
копировать
http && ip.dst eq ${dns.a}

Вы можете видеть, что HTTP-запросы, соответствующие требованиям, фильтруются.

На этом этапе мы снова нажимаем Enter:

Вы обнаружите, что возврат на этот раз пуст.,потому чтодля Цитировать一次назад${dns.a}будет очищен,Чтобы продолжить цитирование,затем используйтеdns.aоператор и повторный выбор мыши.。

2.6.2 Ссылки на несколько переменных

выше${}Этот способ записи аналогиченbashвнутрииз Переменная запись,Затем разверните его,Вы также можете ссылаться на несколько переменных одновременно,напримерв то же времяиспользоватьip.addrиtcp.portдвафильтр Поле:

Язык кода:bash
копировать
ip.addr == 10.8.15.101 && tcp.port == 80

В этот момент кликаем по кадру мышкой.

Затем создайте ссылки на переменные и фильтруйте только http:

Язык кода:bash
копировать
ip.addr == ${ip.addr} && tcp.port== ${tcp.port} && http

Мы получили нужные данные в обычном режиме.

2.7 Протоколы и поля фильтрации поиска

Нажмите Анализировать --> Выражение фильтра отображения (Display Filter Expression) 可以进入приезжатьфильтрстраница выражения,существование Здесь вы можете искать любой протокол или поле по вашему желанию.,И кликните мышкой, чтобы выбрать нужное вам выражение,Wireshark поможет вам написать полное заявление.

напримерпоискdns.a,Появится весь полный текст, соответствующий протоколу или полю dns.a:

На этом этапе мы нажимаем на первый из них, то есть dns.a, и вы можете выбрать символ связи в правом верхнем углу:

Затем в разделе существующего значения просто напишите значение поля IP, которое нужно фильтровать:

После нажатия кнопки «ОК» и «Ввод» будет применен этот оператор фильтра:

То же самое относится и к любому другому протоколу или методу фильтрации полей.

2.8 Добавьте операторы фильтра в виде кнопок

Например, вы хотите отфильтровать пакеты SYN при первом подтверждении TCP.,И эта функция часто используется,Этот оператор фильтра необходимо добавить в виде кнопки.,Удобно применить это утверждение при следующем щелчке мыши.,Не нужно каждый раз вводить вручную,Это особенно полезно для более длинных операторов и операторов с более сложной логикой.

Во-первых, четко отфильтруйте оператор фильтрации, соответствующий пакету SYN в первом подтверждении TCP:

Язык кода:bash
копировать
tcp.flags.syn==1 && tcp.flags.ack==0

Затем добавьте кнопки пользовательских фильтров в указанном порядке:

НажмитеOKназад可以看приезжать右边多出来一个我们自定义изкнопка метки:TCP SYNS

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

2.9 Применение любого поля в качестве столбца

Например, сценарий ICMP,Когда вы хотите открыть сообщение,Он может четко отображать время пинга каждого пакета.

Сначала вам нужно найти поле времени ответа ICMP, развернуть сообщение «Ответ ICMP» и найти поле «Время ответа»:

Щелкните правой кнопкой мыши поле, а затем щелкните его правой кнопкой мыши. --> Применить как столбец (Применить as Column):

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

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

2.10 Изменение относительной последовательности на исходную последовательность

Исходный порядковый номер (поле: tcp.seq_raw) также называется абсолютным порядковым номером. По умолчанию порядковые номера, отображаемые Wireshark, представляют собой относительные порядковые номера с каждым потоком TCP в качестве измерения (например, последовательность первого подтверждения SYN). начинается с 0 (расчет), а порядковые номера seq в реальных взаимодействиях являются исходными порядковыми номерами и не начинаются с 0, поэтому использование относительных порядковых номеров не способствует двухточечному, сквозному или полноканальному анализу. того же потока TCP.

В это время вы можете существовать редактировать(Edit)--> Предпочтения(Preferences)--> Протоколы --> TCP На странице снимите флажок Относительный серийный номер (Относительный серийный номер). sequence numbers):

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

2.11 Символы стрелок Wireshark

Wireshark будет находиться в самой левой части кадра, отмечая кадры запроса (→) и кадры ответа ( ←) символами стрелок:

Это особенно полезно для пакетов, длина кадра которых слишком велика и усекается, поэтому невозможно определить, какой кадр является кадром запроса или ответа, как в следующем примере:

Если вы не смотрите на символ стрелки,Нелегко интуитивно определить, какой кадр является HTTP-запросом.,Wireshark отмечает это по умолчанию.,Кадр 4 — это запрос,Кадр 11 — это ответ,Предполагается, что мышь должна выбрать кадр запроса.илиответный кадр,WiresharkТолько тогда рамка запроса будет для вас полностью размечена.иответный кадр。

То же самое касается DNS и ICMP. Например, если вы выберете один из запросов DNS с помощью мыши, Wireshark одновременно отметит ответы, соответствующие выбранному запросу, символами стрелок.

3. Методы фильтрации для распространенных сценариев применения.

3.1 Фильтрация доменных имен HTTP/HTTPS/TLS-запросов

Используйте следующий оператор фильтрации, чтобы отфильтровать HOST запроса HTTP и имя хоста запроса на этапе приветствия клиента в ходе установления связи TLS:

Язык кода:bash
копировать
tls.handshake.type == 1 || http.request

HTTPЗапросить доменное имясуществоватьhttp.hostв пределах поля,TLS/HTTPSЗапросить доменное имясуществоватьclient Поле расширения SNI на этапе приветствия отображается, поэтому, как показано на рисунке выше, эти два поля можно использовать в качестве столбцов, а имя домена запроса, передаваемое в сообщении HTTP/HTTPS/TLS, можно увидеть более четко.

3.2 Фильтрация кодов состояния HTTP или диапазонов кодов состояния

Нам бы хотелось знать о сообщениях с кодами состояния HTTP-ответа 4xx и 5xx. Вы можете сделать это:

Язык кода:bash
копировать
string(http.response.code) ~ "^4[0-9]{2}$|^5[0-9]{2}$"

первыйиспользоватьstring()функция ВоляHTTPкод состояния Поле Конвертироватьдлянитьтип,Затем используйте PCRE для сопоставления кода состояния 4xxи5xx.

Если вы хотите ограничить поиск несколькими фиксированными кодами состояния, это еще проще:

Язык кода:bash
копировать
http.response.code in {403,404,502,503,504}

Если это сообщение, зашифрованное HTTPS/TLS, вы хотите отфильтровать код состояния.,Этот метод не работает,Поскольку данные зашифрованы, после рукопожатия не видно полей с открытым текстом.,Если соответствующие поля не фильтруются после расшифровки,Как расшифровать можно посмотретьЭта статья

3.3 Фильтрация сообщений SYN, при которых не удалось установить соединение TCP

Фильтровать запросы, которые не прошли первое рукопожатие и не получили ответ SYN-ACK, который может быть:

Язык кода:bash
копировать
tcp.completeness.syn==1&&tcp.completeness.syn-ack==0&&tcp.completeness.ack==0&&tcp.completeness.data==0&&tcp.completeness.fin==0

tcp.completeness.syn-ackЭто заявление,используется дляфильтрсуществование TCP-соединенияиз Он закрыт в положении флага?syn-ackизсообщение,То же самое относится и к другим флагам,Официальная документацияиз Объяснено ниже:

TCP Conversation Completeness

TCP conversations are said to be complete when they have both opening and closing handshakes,

independently of any data transfer. However, we might be interested in identifying complete

conversations with some data sent, and we are using the following bit values to build a filter value

on the tcp.completeness field :

• 1 : SYN

• 2 : SYN-ACK

• 4 : ACK

• 8 : DATA

• 16 : FIN

• 32 : RST

Вы можете увидеть полное сообщение ниже. Соединение было фактически отклонено RST-ACK, поскольку порт целевого сервера не прослушивается:

А если мы просто отфильтруем пакеты с Syn, равным 1, и ack, равным 0:

Язык кода:bash
копировать
tcp.flags.syn==1 && tcp.flags.ack==0

Эта логика просторама как размер,Пока флаг SYN равен 1,И флаг ACK равен 0 пакетам,будет отображаться,Не существует понятия TCP-потока/TCP-сеанса.,Некоторые сцены также могут быть отфильтрованы.,Но больше рекомендуетсяtcp.completeness.xxxзаявление,Более точные требования к попаданию.

3.4 Фильтрация сообщений о тайм-ауте/потере пакетов при повторной передаче

Следующие методы можно использовать для фильтрации сообщений о таймауте TCP или повторной передаче о потере пакетов:

Язык кода:bash
копировать
tcp.analysis.retransmission

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

Язык кода:bash
копировать
tcp.analysis.retransmission && tcp.time_delta >= 0.2

3.5 Кадры в одном TCP-потоке сортируются по интервалу времени.

Сначала щелкните любой кадр TCP, найдите поле временной метки, щелкните правой кнопкой мыши «Время». since previous frame in this TCP Поле «поток» (означает время относительно предыдущего кадра в потоке TCP) --> Применить как столбец (Применить as Column):

Затем перетащите поле туда, где его можно увидеть:

Щелкнув это поле, вы отсортируете пакеты от больших к меньшим, снизу вверх за считанные секунды:

Нажмите еще раз, чтобы отсортировать сообщения от меньшего к большему.

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

В противном случае это поле все равно будет отсортировано по размеру.

Если вы хотите фильтровать сообщения с этим полем, превышающим определенный интервал времени, например, если интервал кадров превышает 100 секунд, вы можете использовать:

Язык кода:bash
копировать
tcp.time_delta >= 100

3.6 Фильтрация/сортировка Ping-запросов, которые занимают много времени или имеют тайм-аут

3.6.1 Сортировка по затратам времени

Сначала примените поле, требующее времени ответа ICMP, в виде столбца. О том, как работать, см. выше. 2.9 часть.

Затем фильтруйте только запросы ответа icmp:

Язык кода:bash
копировать
icmp.type == 0

Вы можете видеть, что в поле «Время ответа» интуитивно указано время RTT каждого ответного сообщения icmp.

Щелкните это поле дважды, чтобы отсортировать его от большого к меньшему, какой пакет занимает больше всего времени, можно увидеть более интуитивно:

3.6.2 Фильтрация длительных ответов ICMP

Далее, если вы хотите фильтровать запросы, которые занимают более 8,5 мс, вы можете сделать:

Язык кода:bash
копировать
icmp.resptime >= 8.5

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

Язык кода:bash
копировать
icmp.seq == 1 && icmp.ident == 8

3.6.3 Фильтрация пакетов Ping с тайм-аутом/отсутствием ответа

Это может сделать одно утверждение:

Язык кода:bash
копировать
icmp.resp_not_found

Видно, что пинг внутреннего публичного DNS 114 не получил ответа, что не исключает возможности запрета пинга с противоположного конца.

3.7 Фильтрация/сортировка запросов, требующих длительного разрешения DNS или тайм-аута

3.7.1 Сортировка по затратам времени

Сначала найди DNS responseизсообщение,展开назад找приезжать最底下изdns.timeПоле,Щелкните правой кнопкой мыши Применить к столбцу.,Вы также можете узнать, как работатьвыше 2.9 Фестиваль.

После применения в качестве столбца,Фильтровать запросы Вы можете написать напрямуюdns.time,Затем дважды щелкните столбец, который мы только что добавили:

Вы можете видеть, что время ответа DNS было отсортировано от большего к меньшему.

3.7.2 Фильтровать длинные DNS-ответы

dns.timeПолеиз Единица измерения – секунды,Фильтрация ответов DNS, которые занимают более 50 мс, может осуществляться следующим образом:

Язык кода:bash
копировать
dns.time > 0.05

3.7.3 Фильтрация пакетов, которые не преобразуются в адреса

Это может сделать одно утверждение:

Язык кода:bash
копировать
dns.count.answers == 0

Ни один из этих запросов не был разрешен по адресу, а количество возвращенных записей было равно 0:

3.8 Отслеживание DNS-запросов и ответов/фильтрация доменных имен, разрешенных DNS

3.8.1 Отслеживание DNS-запросов (dns.id)

Вы можете отслеживать DNS-запрос и соответствующий ответ на основе поля dns.id. Например, отслеживайте следующие два поля dns.id:

Язык кода:bash
копировать
dns.id in {0xdca1,0xe724}

3.8.2 Фильтрация доменных имен, разрешенных DNS (dns.qry.name)

Фильтруйте доменные имена, разрешенные DNS, например cloud.tencent.com, которые могут быть:

Язык кода:bash
копировать
dns.qry.name == "cloud.tencent.com"

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

Язык кода:bash
копировать
dns.qry.name ~ "bing.com$|microsoft.com$"

3.9 Соединение сбрасывается (Reset)

Я считаю, что многие люди сталкивались при посещении веб-сайта с такими ошибками, как «пир отказался от соединения», «ERR_CONNECTION_REFUSED», «соединение было сброшено» и другими ошибками:

Мы могли бы также проанализировать пакеты в этом сценарии:

Трехстороннее рукопожатие успешно установлено.,На этом этапе клиент отправляет запрос GET.,Узел ответил RST-ACK для отключения.,в то же время,TTL SYN-ACK, отправленного партнером, равен 112.,ip.id — 99537,И TTL RST-ACK вдруг становится 253,ip.id становится 256,Это очевидно,Это сообщение RST-ACK не было активно отправлено со стороны однорангового узла.。Так кто отправит?из?Есть несколько возможностей:

  • Доменное имя разрешено внутреннему серверу и не зарегистрировано, поэтому доступ блокируется;
  • Оно связано с незаконным бизнесом и блокируется соответствующими подразделениями оператора;
  • Верхний уровень противоположного конца и клиент имеют устройства безопасности, такие как брандмауэры безопасности и политики для блокировки доступа.,На RST-ACK был дан ответ от имени клиента.

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

3.10 Укажите временной диапазон/укажите фильтрацию диапазона номеров кадров

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

3.10.1 Укажите временной диапазон (frame.time)

Обычно для фильтрации измерения времени используется пекинское время (frame.time). Конечно, вы также можете использовать время UTC (frame.time_utc) и время UTC, соответствующие следующим двум полям времени:

После фильтрации в течение определенного времени:

Язык кода:bash
копировать
frame.time >= "2024-10-20 03:45:00"

Фильтровать по определенному диапазону времени:

Язык кода:bash
копировать
frame.time >= "2024-10-20 03:45:00" && frame.time <= "2024-10-20 03:45:30"

3.10.2 Укажите диапазон номеров кадров (frame.number)

Фильтрация 1024~10240 кадров может быть:

Язык кода:bash
копировать
frame.number >= 1024 && frame.number <= 10240

3.11 Фильтрация по IP-адресу/номеру AS

Эта функция требует, чтобы Wireshark настроил библиотеку IP-адресов для реализации,Как настроить Вы можете обратиться к авторуЭта статья,И есть более подробная информация об использовании фильтрации полей библиотеки адресов.,Ниже приведены лишь два наиболее часто используемых примера.

3.11.1 Фильтрация по IP-адресу

Чтобы фильтровать TCP-пакеты из указанной страны, например, чтобы фильтровать TCP-пакеты с IP-адресом в США, это может быть:

Язык кода:bash
копировать
ip.geoip.country == "United States" && tcp

Конечно, это также может быть измерение города. Например, чтобы фильтровать только запросы с местоположением в Лос-Анджелесе или Чикаго, вы можете написать так:

Язык кода:bash
копировать
ip.geoip.city in {"Los Angeles","Chicago"}

3.11.2 Фильтр по номеру AS

Фильтрация по номеру AS аналогична описанному выше методу фильтрации, просто найдите соответствующее поле фильтра.

Фильтрация запросов SYN для определенного номера AS:

Язык кода:bash
копировать
ip.geoip.asnum == 20326 && tcp.flags.syn==1

Фильтрация UDP-пакетов в определенном диапазоне номеров AS:

Язык кода:bash
копировать
ip.geoip.asnum >= 20000 && ip.geoip.asnum <= 21000 && udp

3.12 Ситуация повторного использования порта фильтра

Определение повторного использования TCP-порта в Wireshark:

То есть, когда пакет с флагом SYN в файле захвата пакетов (исключая SYN-ACK) имеет существующий сеанс с использованием того же адреса и порта, а последовательность отличается от начальной последовательности существующего сеанса, SYN будет Сообщается, что документ помечен для повторного использования порта.

Исходя из этого определения, даже в сообщении TCP stream SYN 1 использует набор IP-адресов и портов источника и назначения, а также TCP этого пакета. stream SYN 100 также использует этот набор IP-адресов источника и назначения и портов. Даже если два потока находятся на расстоянии тысяч миль друг от друга, даже если существует разрыв в один год или десять лет, пока появляется один и тот же файл захвата пакетов. Wireshark может по определению поставить тот TCP, который появится позже stream Отметка SYN 100 означает повторное использование порта.

Например, следующий пример:

Кадр 49 и 83,Сообщение SYN существует в разных потоках TCP.,Используйте один и тот же исходный IP-адрес, IP-адрес назначения, порт источника и порт назначения.,Итак, SYN, который появится позже,Wireshark отмечает повторное использование портов.

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

Чтобы отфильтровать повторное использование портов, вы можете использовать следующий оператор фильтра:

Язык кода:bash
копировать
tcp.analysis.reused_ports

3.13 Определение и фильтрация TCP Keep-Alive

Определение TCP Keep-Alive от Wireshark:

То есть следующие три условия должны быть выполнены одновременно, прежде чем он будет помечен как TCP Keep-Alive:

  • длина сегмента (длина) равна 0 или 1 байт;
  • Текущий порядковый номер на единицу меньше следующего ожидаемого порядкового номера;
  • Биты SYN, FIN, RST и другие флаги не установлены в 1.

Синтаксис фильтрации таких пакетов:

Язык кода:bash
копировать
tcp.analysis.keep_alive || tcp.analysis.keep_alive_ack #Поместите сюда поддержку активности также добавляются пакеты возврата ack

Видно, что все отфильтрованные пакеты подтверждения активности одновременно удовлетворяют трем вышеуказанным условиям. Когда длина сегмента равна 1, заполненные данные равны 0, что соответствует шестнадцатеричному значению 0x00, что указывает на то, что это пустой сегмент данных. Почему установлено значение 1? Протокол TCP требует, чтобы каждый сегмент данных содержал не менее 1 байта полезной нагрузки. Установка длины в 1 байт гарантирует, что пакет обнаружения соответствует этому требованию, что не только экономит накладные расходы, но также обеспечивает возможность обновления времени поддержания активности сеанса. (обязательно здесь) В отличие от длинных соединений HTTP Keep-Alive).

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.