Что такое 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

Три основных панели:
  1. Packet List (список пакетов) — сверху, каждая строка = один пакет
  2. Packet Details (детали пакета) — посередине, дерево протоколов
  3. Packet Bytes (байты пакета) — снизу, HEX + ASCII дамп

Основные команды tshark

tshark — базовые команды
# Захват трафика на eth0 $ sudo tshark -i eth0 # Захват с фильтром и записью $ sudo tshark -i eth0 -f "port 80" -w /tmp/http.pcap # Чтение pcap с display-фильтром $ tshark -r /tmp/capture.pcap -Y "http.request" # Вывод конкретных полей $ tshark -r /tmp/capture.pcap -Y "http" -T fields -e ip.src -e http.host -e http.request.uri # Вывод в JSON $ tshark -r /tmp/capture.pcap -T json -Y "dns" | python3 -m json.tool | head -50 # Список поддерживаемых протоколов $ tshark -G protocols | grep -i "http" # Статистика разговоров $ tshark -r /tmp/capture.pcap -q -z conv,tcp

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"
Важно: Синтаксис Capture Filters и Display Filters различается. Capture Filters используют BPF-синтаксис (host, port), а Display Filters — синтаксис Wireshark (ip.addr ==, tcp.port ==).

Ключевые Display Filters (Фильтры отображения)

IP-адреса

Любой трафик с/к IP
ip.addr == 192.168.1.1
Только источник
ip.src == 10.0.0.5
Только назначение
ip.dst == 8.8.8.8
Исключить IP
!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-порт (любой)
tcp.port == 80
UDP-порт (любой)
udp.port == 53
TCP-порт источника
tcp.srcport == 443
TCP-порт назначения
tcp.dstport == 22
Диапазон портов
tcp.port >= 8000 and tcp.port <= 8080
Нестандартные HTTP
http and tcp.port != 80 and tcp.port != 443

Протоколы прикладного уровня

HTTP запросы
http.request
HTTP ответы
http.response
HTTP метод GET
http.request.method == "GET"
HTTP метод POST
http.request.method == "POST"
URL содержит строку
http.request.uri contains "login"
HTTP статус 200 OK
http.response.code == 200
HTTP статус 4xx ошибки
http.response.code >= 400 and http.response.code < 500
DNS запросы
dns.flags.response == 0
DNS ответы
dns.flags.response == 1
DNS имя запроса
dns.qry.name == "example.com"
Весь ICMP трафик
icmp
ICMP Echo Request
icmp.type == 8
Весь ARP
arp
ARP Reply
arp.opcode == 2

TCP флаги

SYN пакеты
tcp.flags.syn == 1 and tcp.flags.ack == 0
SYN-ACK (сервер)
tcp.flags.syn == 1 and tcp.flags.ack == 1
RST (сброс)
tcp.flags.reset == 1
FIN (завершение)
tcp.flags.fin == 1
PSH (данные)
tcp.flags.push == 1
NULL scan (нет флагов)
tcp.flags == 0
XMAS scan (все флаги)
tcp.flags == 0x3f
Ретрансмиссии TCP
tcp.analysis.retransmission

Поиск по содержимому

Фрейм содержит строку
frame contains "password"
Frame содержит hex
frame contains 50:41:53:53
HTTP содержит строку
http contains "admin"
DNS содержит домен
dns contains "evil"
SQL injection признаки
http.request.uri matches "(?i)(union|select|drop|insert)"
User-Agent подозрительный
http.user_agent contains "sqlmap"

Составные фильтры

Составные фильтры Wireshark
# HTTP трафик от конкретного хоста, исключая ресурсы ip.src == 192.168.1.5 and http.request and !http.request.uri contains ".css" # Все TCP соединения от подозрительного хоста ip.addr == 10.0.0.100 and tcp.flags.syn == 1 # DNS к нестандартным резолверам (не 8.8.8.8, не 1.1.1.1) dns and !(ip.dst == 8.8.8.8 or ip.dst == 1.1.1.1 or ip.dst == 8.8.4.4) # Большие ICMP пакеты (потенциальная утечка данных) icmp and frame.len > 100 # ARP spoofing: дублирующиеся ответы arp.opcode == 2 and arp.duplicate-address-detected # Трафик на высоких портах (выше 49152 — ephemeral) tcp.dstport > 49152 and !(ip.dst == 192.168.1.0/24) # C2 Beaconing — регулярные соединения к внешним IP tcp.flags.syn == 1 and !(ip.dst == 192.168.0.0/16)

Protocol Dissectors (Диссекторы протоколов)

Диссектор — плагин Wireshark, который «разбирает» (dissect) конкретный протокол, выделяя все поля из сырых байт пакета. Wireshark содержит более 3000 диссекторов.

Принудительное декодирование протокола

Когда использовать: если сервис работает на нестандартном порту (например, HTTP на 8080 или SSH на 2222), Wireshark может неправильно определить протокол. Принудительно декодируйте: ПКМ на пакете → Decode As...
tshark — принудительное декодирование
# Декодировать порт 8080 как HTTP $ tshark -r capture.pcap -d tcp.port==8080,http -Y "http" # Декодировать порт 5000 как SIP $ tshark -r capture.pcap -d udp.port==5000,sip

Популярные диссекторы и их фильтры

ПротоколФильтрКлючевые поля
HTTPhttphttp.host, http.request.uri, http.response.code
HTTPS/TLStlstls.handshake.type, tls.record.version, tls.handshake.server_name
DNSdnsdns.qry.name, dns.a, dns.resp.type
DHCPdhcpdhcp.option.hostname, dhcp.ip.your
SMBsmb or smb2smb.cmd, smb2.cmd
SMTPsmtpsmtp.req.parameter
FTPftpftp.request.command, ftp.request.arg
SSHsshssh.protocol
OSPFospfospf.msg, ospf.area_id
BGPbgpbgp.type, bgp.nlri_prefix

Следование TCP/UDP потокам (Follow Stream)

Функция Follow Stream собирает все пакеты одного соединения и отображает данные в удобочитаемом виде. Незаменима для анализа HTTP-сессий, FTP-команд, Telnet-сеансов и других протоколов открытого текста.

Как использовать:
  1. Кликните правой кнопкой на пакет нужного потока
  2. Выберите Follow → TCP Stream (или UDP, HTTP, TLS)
  3. Откроется окно с полным содержимым сессии

Горячие клавиши: Ctrl+Alt+Shift+T (TCP Stream)
tshark — следование потоку
# Показать конкретный TCP-поток (stream index 0) $ tshark -r capture.pcap -q -z follow,tcp,ascii,0 # Получить список всех TCP-потоков $ tshark -r capture.pcap -T fields -e tcp.stream | sort -n | uniq # Фильтр по конкретному потоку в Wireshark: tcp.stream == 0 tcp.stream == 5 # UDP поток $ tshark -r capture.pcap -q -z follow,udp,ascii,0

Анализ HTTP-сессии через Follow Stream

Пример содержимого HTTP-потока
==== КЛИЕНТ → СЕРВЕР (синий) ==== POST /login HTTP/1.1 Host: vulnerable-app.com Content-Type: application/x-www-form-urlencoded Content-Length: 35 username=admin&password=admin123 ↑ Учётные данные в открытом тексте! ==== СЕРВЕР → КЛИЕНТ (красный) ==== HTTP/1.1 302 Found Location: /dashboard Set-Cookie: session=eyJhbGciOiJIUzI1NiJ9...; Path=/; HttpOnly

Правила раскраски (Coloring Rules)

Wireshark раскрашивает пакеты по цветовым правилам для быстрой визуальной идентификации. Правила задаются в меню View → Coloring Rules.

ЦветПравило (фильтр)Значение
🟢 ЗелёныйtcpTCP-трафик
ГолубойudpUDP-трафик
Чёрный (красн. текст)tcp.analysis.flags && !tcp.analysis.window_updateTCP-ошибки (ретрансмиссия, дубликат ACK)
🔴 Красныйhttp.response.code >= 400HTTP ошибки
🟡 ЖёлтыйarpARP-трафик
ФиолетовыйicmpICMP
Серый!ipНе-IP (broadcast, etc.)

Создание пользовательских правил раскраски

Создание правила для атак:
  1. View → Coloring Rules → Нажмите +
  2. Введите имя правила: Port Scan Detection
  3. Фильтр: tcp.flags.syn == 1 and tcp.flags.ack == 0
  4. Выберите цвет фона (красный) и текста
  5. 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-адреса с объёмом трафика. Выявляет подозрительные хосты с большим исходящим трафиком.

tshark — статистические команды
# Иерархия протоколов $ tshark -r capture.pcap -q -z io,phs Protocol Hierarchy Statistics Filter: eth frames:1234 bytes:987654 ip frames:1200 bytes:950000 tcp frames:900 bytes:800000 http frames:200 bytes:180000 udp frames:300 bytes:150000 dns frames:150 bytes:25000 # Список разговоров TCP $ tshark -r capture.pcap -q -z conv,tcp | head -20 # Статистика HTTP запросов $ tshark -r capture.pcap -q -z http,tree # Статистика DNS запросов $ tshark -r capture.pcap -q -z dns,tree # Статистика RTT для TCP соединений $ tshark -r capture.pcap -q -z tcp,rtt # Подсчёт пакетов по IP источника $ tshark -r capture.pcap -T fields -e ip.src | sort | uniq -c | sort -rn | head -10

Экспорт данных

Экспорт объектов (файлов)

File → Export Objects → HTTP/SMB/TFTP. Извлекает файлы, переданные по протоколу, прямо из захвата.

Экспорт в PDML/JSON

File → Export Packet Dissections → As JSON. Машиночитаемый формат для последующего анализа скриптами.

Сохранение части захвата

File → Export Specified Packets. Сохраняет только отфильтрованные пакеты в новый .pcap файл.

tshark — экспорт данных
# Экспортировать HTTP объекты (файлы) из pcap $ tshark -r capture.pcap --export-objects http,/tmp/http-objects/ # Сохранить в JSON $ tshark -r capture.pcap -T json > capture.json # Сохранить только HTTP пакеты в новый pcap $ tshark -r capture.pcap -Y "http" -w http-only.pcap # Извлечь IP и DNS имена из захвата $ tshark -r capture.pcap -T fields -e ip.dst -e dns.qry.name -Y "dns" | sort -u

Практика: анализ реального трафика

Анализ TCP-рукопожатия (3-way handshake)

Фильтры для анализа handshake
# Показать только SYN, SYN-ACK, ACK для конкретного хоста ip.addr == 93.184.216.34 and tcp.flags.syn == 1 # Только трёхстороннее рукопожатие (без данных) (tcp.flags.syn == 1 or (tcp.flags.ack == 1 and tcp.len == 0)) and ip.addr == 93.184.216.34 # Детализированный вывод через tshark $ tshark -r capture.pcap -Y "ip.addr==93.184.216.34 and tcp.flags.syn==1" \ -T fields -e frame.time -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport \ -e tcp.flags.syn -e tcp.flags.ack -e tcp.seq -e tcp.ack 2024-10-30 10:40:01 192.168.1.5 93.184.216.34 52345 80 1 0 100 0 2024-10-30 10:40:01 93.184.216.34 192.168.1.5 80 52345 1 1 200 101

Анализ HTTP-запроса

HTTP анализ
# Все HTTP GET запросы http.request.method == "GET" # Детали запросов через tshark $ tshark -r capture.pcap -Y "http.request" -T fields \ -e ip.src -e http.host -e http.request.method -e http.request.uri -e http.user_agent 192.168.1.5 example.com GET /index.html Mozilla/5.0 (Linux) 192.168.1.5 api.service.com POST /login curl/7.88.1 # Ответы сервера с кодами http.response $ tshark -r capture.pcap -Y "http.response" -T fields \ -e ip.src -e http.response.code -e http.content_type -e http.content_length

Анализ DNS-запроса

DNS анализ
# Все DNS запросы и ответы dns # Только запросы типа A (IPv4) dns.qry.type == 1 and dns.flags.response == 0 # Запросы типа TXT (часто используется при DNS tunneling) dns.qry.type == 16 # Необычно длинные DNS имена (tunneling признак) dns.qry.name.len > 50 # Подробный вывод DNS $ tshark -r capture.pcap -Y "dns" -T fields \ -e frame.time -e ip.src -e ip.dst -e dns.qry.name \ -e dns.qry.type -e dns.flags.response -e dns.a 10:23:41 192.168.1.5 8.8.8.8 example.com A request - 10:23:41 8.8.8.8 192.168.1.5 example.com A response 93.184.216.34
Экспресс-анализ захвата: Используйте следующий порядок действий:
  1. Statistics → Protocol Hierarchy — понять состав трафика
  2. Statistics → Conversations → TCP — найти top-talkers
  3. Statistics → DNS Queries — список всех разрешённых доменов
  4. Фильтр http.request or dns — прикладной уровень
  5. Follow TCP Stream на подозрительных соединениях