Linux - Wireshark


Руководство и шпаргалка по Wireshark https://habr.com/ru/post/436226/

Практические приёмы работы в Wireshark https://habr.com/ru/company/ruvds/blog/416537/

Анализ SSL/TLS трафика в Wireshark https://habr.com/ru/company/billing/blog/261301/

Как легко расшифровать TLS-трафик от браузера в Wireshark https://habr.com/ru/post/253521/

Wireshark — приручение акулы https://habr.com/ru/post/204274/

Устанока/Запуск


sudo apt-get install -y wireshark
...
$ wireshark --version
Wireshark 2.6.10 (Git v2.6.10 packaged as 2.6.10-1~ubuntu16.04.0)
...

sudo wireshark

Запуск только по root-ом

Фильтры

  • Source - кто спрашивает
  • Destonation - кто отвечает

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

ОператорОписание
containsСодержит
==/eqРавно
!=/neНе равно
\<\/ltМеньше чем
<=/leМеньше или равно
>/gtБольше чем
>=/geБольше или равно

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

ОператорОписание
and/&&Логическое И. Данные выводяться если они соответствуют обоим частям фильтра
or/||Логическое ИЛИ. Достаточно чтобы одно условие было истинным
not/!Логическое НЕ. Отрицание условия выборки

Справочник фильтров

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


tcp.port>=8000 && tcp.port<=8180

Показать HTTP или DNS трафик


http or dns

Показать любой трафик, кроме ARP, ICMP и DNS:


!(arp or icmp or dns)

Показать пакеты только отправленные или полученные на интерфейсе wlan0:


frame.interface_name == "wlan0"

Трафик канального уровня

Показать arp трафик


arp

Показать фреймы ARP протокола, отправленные с устройства, имеющего MAC-адрес 78:b2:13:be:08:48


arp.src.hw_mac == 78:b2:13:be:08:48

Показать фреймы ARP протокола, отправленные с устройства, имеющего IP адрес 192.168.50.90


arp.src.proto_ipv4 == 192.168.50.90

Трафик сетевого уровня

Показать ip трафик


ip

Показать источник (тот кто получил) трафика ip 192.168.1.67


ip.src == 192.168.1.67

Показать адресат (тот кто отправил) трафик ip =


ip.dst == 192.168.1.67

Показать источник или приемник


ip.addr == 192.168.1.67

Трафик транспортного

TCP

Показать tcp или udp


tcp or udp

Трафик на 4000 порт


tcp.port == 4000

Трафик, источником которого является порт 4000


tcp.srcport == 4000

Трафик, который отправляется службе на порту 4000


tcp.dstport == 4000

Трафик SYN-флудом


tcp.flags.syn == 1

Следовать потоку TCP с номером X


tcp.stream eq X

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


tcp.seq == x

Показать повторные отправки пакетов


tcp.analysis.retransmission

UDP

Трафик на 53 порт


udp.port == 53

Трафик, источником которого является порт 53


udp.srcport == 53

Трафик, который отправляется службе на порту 53


udp.dstport == 53

ICMP

Трафик icmp


icmp

Показать все пинг запросы


icmp.type == 8

Показать все пинг ответы


icmp.type == 0

Показать все ошибки недоступности/запрета хостов и портов


icmp.type==3

Пример использования значения CODE, следующий фильтр покажет сообщения о недоступности порта:


icmp.type==3 && icmp.code==3

Трафик прикладного уровня

HTTP

Чтобы увидеть HTTP трафик


http

Чтобы увидеть трафик нового протокола HTTP/2


http2

Данные переданные методом POST


$ curl -X POST ya.ru
...    
http.request.method == "POST"

Данные переданные методом GET


http.request.method == "GET"

Трафик на определенный хост


http.host eq ya.ru

Трафик с http куками


http.cookie

Запросы, в которых сервер установил кукиз в браузер пользователя


http.set_cookie

Поиск любых переданных изображений


http.content_type contains "image"

Для поиска файлов


http.content_type contains "gif"
http.content_type contains "jpeg"
http.content_type contains "png"

http.content_type contains "text"
http.content_type contains "xml"
http.content_type contains "html"
http.content_type contains "json"
http.content_type contains "javascript"
http.content_type contains "x-www-form-urlencode"
http.content_type contains "compressed"
http.content_type contains "application"

http.request.uri contains "zip"

ФИльтр по файлам


http.file_data

Трафик с задержкой более 1 сек.


http.time>1

Статусы 404


http.response.code == 404

Что-то сложное…


http.request && !(http.request.uri contains ".ico" or http.request.uri contains ".css" or http.request.uri contains ".js" or http.request.uri contains ".gif" or http.request.uri contains ".jpg")

DNS


dns

Запросы более 1 сек.


dns.time > 1

Этот фильтр показывает, какие dns запросы не могут быть правильно разрешены:


dns.flags.rcode != 0

DNS запросы


dns.flags.response == 0

DNS ответы


dns.flags.response == 1

Показать запросы и ответы на них, в котором ищется IP для ya.ru


dns.qry.name == "ya.ru"

Показать DNS запросы и ответы касаемые записи A


dns.qry.type == 1

Показать DNS запросы и ответы касаемые записи AAAA


dns.qry.type == 28

Показать ответы, в которых для записи A в качестве IP отправлен 216.58.196.3:


dns.a == 216.58.196.3

Показать ответы, в которых для записи AAAA в качестве IP отправлен 2a01:4f8:172:1d86::1:


dns.aaaa == 2a01:4f8:172:1d86::1

Показать записи с CNAME apollo.archlinux.org:


dns.cname == "apollo.archlinux.org"

Показать ответы длиной более 30:


dns.resp.len > 30

Показать запросы с длиной более 25:


dns.qry.name.len >25

Показать ответы DNS серверов на которых доступна рекурсия:


dns.flags.recavail == 1

Показать ответы DNS серверов на которых не доступна рекурсия:


dns.flags.recavail == 0

Желательна ли рекурсия (если запрошенный DNS сервер не имеет информацию об имени хоста, должен ли он опрашивать другие DNS сервера в поисках этой информации):


dns.flags.recdesired == 1

Если в запросе стоит 1, значит рекурсия нужна, если 0 — значит она не желательна.

Принимать ли неаутентифицированные данные (0 означает не принимать, 1 означает принимать):


dns.flags.checkdisable == 0

Чтобы увидеть, как назначаются IP адреса по протоколу DHCP:

1 udp.dstport==67 Или так:

1 bootp.option.dhcp Чтобы показать DHCP запросы:

1 bootp.option.dhcp == 3 Чтобы показать DHCP Discover:

1 bootp.option.dhcp == 1 SMB фильтр. Этот фильтр в колонке Info показывает всё дерево (шару) соединений, открытых директорий и открытых файлов в трассировке.

1 smb2.cmd==3 or smb2.cmd==5

WIFI

Фильтры для Wi-Fi фреймов Показать элементы четырёхэтапных рукопожатий (то есть фреймы протокола EAPOL):

1 eapol Показать фреймы Beacon (маяки):

1 wlan.fc.type_subtype == 0x08 Показать фреймы Probe Response:

1 wlan.fc.type_subtype == 0x05 Показать всё сразу: EAPOL, маяки, Probe Response:

1 wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol Показать беспроводные фреймы для определённого устройства с MAC-адресом BSSID:

1 wlan.addr==BSSID Показать EAPOL, маяки, Probe Response для определённого устройства с MAC-адресом 28:28:5D:6C:16:24:

1 (wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr==28:28:5D:6C:16:24 Показ всех PMKID:

1 eapol && wlan.rsn.ie.pmkid Показать PMKID, маяки, Probe Response:

1 (wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid)) Показать PMKID, маяки, Probe Response для точки доступа с MAC-адресом 40:3D:EC:C2:72:B8:

1 (wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid)) && wlan.addr==40:3D:EC:C2:72:B8 Показать только первое сообщение рукопожатия:

1 wlan_rsna_eapol.keydes.msgnr == 1 Показать только второе сообщение рукопожатия (можно использовать для сообщения рукопожатия с любым номером):

1 wlan_rsna_eapol.keydes.msgnr == 2 Показать фреймы для точек доступа со скоростью (Data Rate) 1 Мb/s:

1 wlan_radio.data_rate == 1 Показать фреймы для точек доступа со скоростью более 10 Мb/s:

1 wlan_radio.data_rate > 10 Показывать точки доступа на определённой частоте:

1 radiotap.channel.freq == 2412 Показывать точки доступа с определённым уровнем сигнала:

1 wlan_radio.signal_dbm > -50 Фильтры, связанные с наличием у устройства антены:

1 radiotap.present.antenna == 1 и

1 radiotap.antenna == 1 Если вы знаете другие интересные фильтры Wireshark, то поделитесь ими в комментариях.