Что такое Wireshark?
Wireshark — свободный и открытый анализатор сетевых протоколов. Позволяет захватывать пакеты в реальном времени или анализировать сохранённые .pcap файлы. Имеет графический интерфейс (GUI) и консольный аналог — tshark.
Wireshark (GUI)
- Графический интерфейс на Qt
- Интерактивный анализ пакетов
- Визуальные фильтры и раскраска
- Диаграммы и графики I/O
- Follow Stream (следование потоку)
- Drag & Drop для .pcap файлов
tshark (CLI)
- Консольная версия Wireshark
- Захват и анализ без GUI
- Подходит для скриптов и автоматизации
- Те же фильтры, что в Wireshark
- Вывод в JSON, PDML, CSV
- Совместим с tcpdump .pcap файлами
Структура интерфейса Wireshark
- Packet List (список пакетов) — сверху, каждая строка = один пакет
- Packet Details (детали пакета) — посередине, дерево протоколов
- Packet Bytes (байты пакета) — снизу, HEX + ASCII дамп
Основные команды tshark
Capture Filters vs Display Filters
Capture Filters (Фильтры захвата)
- Применяются во время захвата
- Используют синтаксис BPF (как tcpdump)
- Пакеты, не прошедшие фильтр, не записываются
- Снижают нагрузку на диск и CPU
- Вводятся в поле "Capture Filter" перед запуском
port 80
host 192.168.1.1
tcp and port 443
not arp
Display Filters (Фильтры отображения)
- Применяются после захвата/чтения
- Собственный синтаксис Wireshark
- Пакеты не удаляются, только скрываются
- Более мощный и гибкий синтаксис
- Поддерживают поля протоколов
http.request
ip.addr == 192.168.1.1
tcp.port == 443
dns.qry.name contains "evil"
host, port),
а Display Filters — синтаксис Wireshark (ip.addr ==, tcp.port ==).
Ключевые Display Filters (Фильтры отображения)
IP-адреса
ip.addr == 192.168.1.1
ip.src == 10.0.0.5
ip.dst == 8.8.8.8
!ip.addr == 192.168.1.1
ip.addr == 192.168.1.0/24
ip.addr == 10.0.0.1 and ip.addr == 10.0.0.2
TCP и UDP порты
tcp.port == 80
udp.port == 53
tcp.srcport == 443
tcp.dstport == 22
tcp.port >= 8000 and tcp.port <= 8080
http and tcp.port != 80 and tcp.port != 443
Протоколы прикладного уровня
http.request
http.response
http.request.method == "GET"
http.request.method == "POST"
http.request.uri contains "login"
http.response.code == 200
http.response.code >= 400 and http.response.code < 500
dns.flags.response == 0
dns.flags.response == 1
dns.qry.name == "example.com"
icmp
icmp.type == 8
arp
arp.opcode == 2
TCP флаги
tcp.flags.syn == 1 and tcp.flags.ack == 0
tcp.flags.syn == 1 and tcp.flags.ack == 1
tcp.flags.reset == 1
tcp.flags.fin == 1
tcp.flags.push == 1
tcp.flags == 0
tcp.flags == 0x3f
tcp.analysis.retransmission
Поиск по содержимому
frame contains "password"
frame contains 50:41:53:53
http contains "admin"
dns contains "evil"
http.request.uri matches "(?i)(union|select|drop|insert)"
http.user_agent contains "sqlmap"
Составные фильтры
Protocol Dissectors (Диссекторы протоколов)
Диссектор — плагин Wireshark, который «разбирает» (dissect) конкретный протокол, выделяя все поля из сырых байт пакета. Wireshark содержит более 3000 диссекторов.
Принудительное декодирование протокола
Популярные диссекторы и их фильтры
| Протокол | Фильтр | Ключевые поля |
|---|---|---|
| HTTP | http | http.host, http.request.uri, http.response.code |
| HTTPS/TLS | tls | tls.handshake.type, tls.record.version, tls.handshake.server_name |
| DNS | dns | dns.qry.name, dns.a, dns.resp.type |
| DHCP | dhcp | dhcp.option.hostname, dhcp.ip.your |
| SMB | smb or smb2 | smb.cmd, smb2.cmd |
| SMTP | smtp | smtp.req.parameter |
| FTP | ftp | ftp.request.command, ftp.request.arg |
| SSH | ssh | ssh.protocol |
| OSPF | ospf | ospf.msg, ospf.area_id |
| BGP | bgp | bgp.type, bgp.nlri_prefix |
Следование TCP/UDP потокам (Follow Stream)
Функция Follow Stream собирает все пакеты одного соединения и отображает данные в удобочитаемом виде. Незаменима для анализа HTTP-сессий, FTP-команд, Telnet-сеансов и других протоколов открытого текста.
- Кликните правой кнопкой на пакет нужного потока
- Выберите Follow → TCP Stream (или UDP, HTTP, TLS)
- Откроется окно с полным содержимым сессии
Горячие клавиши:
Ctrl+Alt+Shift+T (TCP Stream)
Анализ HTTP-сессии через Follow Stream
Правила раскраски (Coloring Rules)
Wireshark раскрашивает пакеты по цветовым правилам для быстрой визуальной идентификации. Правила задаются в меню View → Coloring Rules.
| Цвет | Правило (фильтр) | Значение |
|---|---|---|
| 🟢 Зелёный | tcp | TCP-трафик |
| Голубой | udp | UDP-трафик |
| Чёрный (красн. текст) | tcp.analysis.flags && !tcp.analysis.window_update | TCP-ошибки (ретрансмиссия, дубликат ACK) |
| 🔴 Красный | http.response.code >= 400 | HTTP ошибки |
| 🟡 Жёлтый | arp | ARP-трафик |
| Фиолетовый | icmp | ICMP |
| Серый | !ip | Не-IP (broadcast, etc.) |
Создание пользовательских правил раскраски
- View → Coloring Rules → Нажмите +
- Введите имя правила:
Port Scan Detection - Фильтр:
tcp.flags.syn == 1 and tcp.flags.ack == 0 - Выберите цвет фона (красный) и текста
- OK → Apply
Статистика (Statistics)
Меню Statistics предоставляет мощные инструменты для сводного анализа трафика.
Protocol Hierarchy
Statistics → Protocol Hierarchy. Показывает процентное соотношение протоколов в захвате. Быстро выявляет аномальный трафик.
Conversations
Statistics → Conversations. Список всех сетевых разговоров (Ethernet, IP, TCP, UDP) с объёмом трафика. Помогает найти top-talkers.
I/O Graphs
Statistics → I/O Graph. График пропускной способности во времени. Позволяет увидеть пики (DDoS, сканирование, exfiltration).
Endpoints
Statistics → Endpoints. Все IP-адреса и MAC-адреса с объёмом трафика. Выявляет подозрительные хосты с большим исходящим трафиком.
Экспорт данных
Экспорт объектов (файлов)
File → Export Objects → HTTP/SMB/TFTP. Извлекает файлы, переданные по протоколу, прямо из захвата.
Экспорт в PDML/JSON
File → Export Packet Dissections → As JSON. Машиночитаемый формат для последующего анализа скриптами.
Сохранение части захвата
File → Export Specified Packets. Сохраняет только отфильтрованные пакеты в новый .pcap файл.
Практика: анализ реального трафика
Анализ TCP-рукопожатия (3-way handshake)
Анализ HTTP-запроса
Анализ DNS-запроса
- Statistics → Protocol Hierarchy — понять состав трафика
- Statistics → Conversations → TCP — найти top-talkers
- Statistics → DNS Queries — список всех разрешённых доменов
- Фильтр
http.request or dns— прикладной уровень - Follow TCP Stream на подозрительных соединениях