Фильтр захвата и фильтр отображения: не путайте
В Wireshark два разных языка фильтров. Фильтр захвата, синтаксис BPF, задаётся до начала записи и определяет, какие пакеты вообще будут сохранены; он тот же, что в tcpdump: host 192.168.1.20 and port 53. Фильтр отображения применяется к уже записанным пакетам и просто скрывает лишние; у него собственный язык с полями вида ip.addr и tcp.port.
Путаница ведёт к ошибкам: запись port 53 в строке отображения будет воспринята как ошибка, а ip.addr == 192.168.1.20 нельзя использовать как фильтр захвата. Строка фильтра отображения подсвечивается: зелёным при верном синтаксисе, красным при ошибке, жёлтым, если запись допустима, но сомнительна, например из-за неоднозначности.
Работать нужно с собственным трафиком либо в сети, где вам разрешили перехват. Файлы захвата содержат адреса и иногда содержимое незашифрованных протоколов, поэтому храните и передавайте их осторожно.
Основные операторы и структура выражений
Выражение состоит из поля, оператора и значения. Знать надо немного операторов, зато они комбинируются.
| Оператор | Смысл | Пример |
|---|---|---|
| == | Равно | ip.addr == 192.168.1.20 |
| != | Не равно | tcp.port != 443 |
| && или and | Оба условия | ip.src == 192.168.1.20 && tcp |
| or (или две вертикальные черты) | Любое из условий | dns or icmp |
| ! или not | Отрицание | !arp |
| contains | Содержит строку | frame contains "example" |
| matches | Совпадает с регулярным выражением | http.host matches "example" |
| in { } | Входит в набор | tcp.port in {80 443 8080} |
Внимание: фильтр ip.addr != 192.168.1.20 работает не так, как ожидают. Пакет проходит, если хотя бы один из его адресов не равен указанному, поэтому почти всё пройдёт. Правильная запись — !(ip.addr == 192.168.1.20). Это самая частая ошибка новичков.
Подсказка: если щёлкнуть правой кнопкой по значению поля в панели деталей и выбрать «Применить как фильтр», Wireshark сам построит корректную запись. Так можно научиться синтаксису, не заучивая имён полей.
Фильтры для повседневной диагностики
Ниже набор записей, которых хватает в большинстве случаев. Вводите их в строку над списком пакетов и нажимайте Enter.
- dns — все DNS-сообщения; dns.qry.name == "example.com" оставит запросы к конкретному имени.
- dns.flags.rcode != 0 — DNS-ответы с ошибкой, например несуществующее имя.
- ip.addr == 192.168.1.20 — весь трафик узла; ip.src и ip.dst ограничивают направление.
- tcp.port == 443 или udp.port == 53 — трафик на порт.
- tcp.flags.syn == 1 && tcp.flags.ack == 0 — начальные SYN-пакеты, то есть попытки соединения.
- tcp.flags.reset == 1 — сбросы соединения.
- icmp — сообщения ICMP, в том числе ping и уведомления о недостижимости.
- arp — обмен ARP в локальной сети.
- http.request — HTTP-запросы в открытом виде; для HTTPS содержимое недоступно.
- tls.handshake.type == 1 — сообщения ClientHello, с которых начинается согласование шифрования.
- tls.handshake.extensions_server_name == "example.com" — ClientHello с указанным именем сервера.
Для выделения работы с сетью в домашней среде часто достаточно сочетания: ip.addr == адрес && (dns or tcp.flags.reset == 1). Так вы одновременно увидите запросы имён и обрывы соединений одного устройства.
Признаки проблем: фильтры анализа TCP
Wireshark сам размечает признаки проблем в поле tcp.analysis. Его записи не хранятся в пакетах, а вычисляются программой, поэтому это очень удобный слой поверх обычных фильтров.
| Фильтр | Что показывает |
|---|---|
| tcp.analysis.flags | Все пакеты, у которых есть предупреждения анализа |
| tcp.analysis.retransmission | Повторные передачи сегментов |
| tcp.analysis.fast_retransmission | Быстрые повторные передачи после дублирующих подтверждений |
| tcp.analysis.duplicate_ack | Дублирующие подтверждения |
| tcp.analysis.lost_segment | Потерянный сегмент по номерам последовательности |
| tcp.analysis.zero_window | Получатель объявил нулевое окно приёма |
| tcp.analysis.out_of_order | Сегменты пришли не по порядку |
Как трактовать. Единичные повторы в длинной загрузке — норма. Стабильно высокая доля повторов и дублирующих подтверждений говорит о потерях на пути: проверьте Wi-Fi, кабель, загрузку канала. Нулевое окно указывает на медленное приложение-получатель, а не на сеть. Сбросы сразу после SYN означают, что порт закрыт или соединение отвергнуто фильтром.
Чёрные строки с красным текстом в списке — стандартная подсветка проблемных TCP-пакетов, и их удобно листать, но опирайтесь всё же на цифры, а не на цвет.
Порядок работы с дампом
- Откройте файл или запишите трафик, воспроизведя проблему; запись держите короткой.
- Начните с общего: меню «Статистика», пункт «Диалоги», чтобы увидеть, какие пары узлов обменялись большим объёмом данных.
- Примените ip.addr для нужного устройства.
- Добавьте фильтры анализа TCP и оцените долю проблемных пакетов.
- Щёлкните по подозрительному пакету правой кнопкой и выберите «Следовать» и затем «TCP-поток», чтобы увидеть весь обмен сессии.
- Сохраните нужные пакеты через экспорт выделенных, а не весь дамп, если собираетесь показать его специалисту.
Для отправки в техподдержку удаляйте лишнее: файл может содержать посторонний трафик и незашифрованные данные. Если сомневаетесь, что вправе делиться дампом, не отправляйте его.
Отличия систем и ограничения
Wireshark выглядит и работает одинаково в Windows, macOS и Linux. Различается способ захвата: в Windows нужен драйвер Npcap, который ставится вместе с программой, в Linux и macOS доступ к интерфейсам требует настройки прав или запуска с повышенными привилегиями. Захват по Wi-Fi показывает только пакеты вашего устройства: чтобы видеть эфир, нужен специальный режим монитора, а он есть не у всех адаптеров и всех систем.
Не забывайте про шифрование: TLS скрывает содержимое, но заголовки TCP, размеры и тайминги остаются видимыми, и для поиска сетевых проблем этого достаточно. Расшифровка чужого трафика не входит в законную диагностику.