Почему wireshark не видит dns пакеты
Перейти к содержимому

Почему wireshark не видит dns пакеты

  • автор:

Почему DNS пакеты уходят напрямую на DNS сервер? Wireshark

В Wireshark посмотрел структуру DNS пакета. Там в MAC-адресе пункта назначения указан адрес шлюза по умолчанию, но в IP-адресе назначения указан IP DNS сервера. Хотя во многих статьях об устройстве пакетов DNS я встречал, что там указан IP шлюза по умолчанию, а не DNS сервера. От чего это зависит и почему так?

Отслеживать
задан 24 окт 2021 в 18:33
ComeInRage ComeInRage
1,601 6 6 серебряных знаков 14 14 бронзовых знаков
Можно пример такой статьи?
24 окт 2021 в 18:36
24 окт 2021 в 18:37

Статья выглядит безграмотной, скорее всего на маршрутизаторе просто установлен свой маленький DNS-сервер, то есть пакеты точно так же уходят напрямую на DNS-сервер, а автор статьи не смог этого понять

24 окт 2021 в 18:39

@andreymal собственно, если подводить итог. В пакете DNS в поле пункта назначения всегда указан конечная точка всего маршрута — DNS Сервер, а в поле MAC-адреса пункта назначения — следующая точка в пути (в данном случае адрес роутера)? И в статье, получается, DNS Сервером является сам шлюз по умолчанию?

24 окт 2021 в 18:42

Да. Практически все домашние роутеры являются (кэширующими) dns серверами и анонсируют по DHCP себя в качестве DNS сервера. (При дефолтных настройках)

Руководство и шпаргалка по Wireshark

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

Устранение неполадок сетевого подключения
  • Визуальное отображение потери пакетов
  • Анализ ретрансляции TCP
  • График по пакетам с большой задержкой ответа
Исследование сессий прикладного уровня (даже при шифровании с помощью SSL/TLS, см. ниже)
  • Полный просмотр HTTP-сессий, включая все заголовки и данные для запросов и ответов
  • Просмотр сеансов Telnet, просмотр паролей, введённых команд и ответов
  • Просмотр трафика SMTP и POP3, чтение писем
Устранение неполадок DHCP с данными на уровне пакетов
  • Изучение трансляций широковещательного DHCP
  • Второй шаг обмена DHCP (DHCP Offer) с адресом и параметрами
  • Клиентский запрос по предложенному адресу
  • Ack от сервера, подтверждающего запрос
Извлечение файлов из сессий HTTP
  • Экспорт объектов из HTTP, таких как JavaScript, изображения или даже исполняемые файлы
Извлечение файлов из сессий SMB
  • Аналогично опции экспорта HTTP, но извлечение файлов, передаваемых по SMB, протоколу общего доступа к файлам в Windows
Обнаружение и проверка вредоносных программ
  • Обнаружение аномального поведения, которое может указывать на вредоносное ПО
  • Поиск необычных доменов или конечных IP
  • Графики ввода-вывода для обнаружения постоянных соединений (маячков) с управляющими серверами
  • Отфильтровка «нормальных» данных и выявление необычных
  • Извлечение больших DNS-ответов и прочих аномалий, которые могут указывать на вредоносное ПО
Проверка сканирования портов и других типов сканирования на уязвимости
  • Понимание, какой сетевой трафик поступает от сканеров
  • Анализ процедур по проверке уязвимостей, чтобы различать ложноположительные и ложноотрицательные срабатывания

Установка Wireshark

Wireshark работает на различных операционных системах и его несложно установить. Упомянем только Ubuntu Linux, Centos и Windows.

Установка на Ubuntu или Debian

#apt-get update #apt-get install wireshark tshark

Установка на Fedora или CentOS

#yum install wireshark-gnome

Установка на Windows

На странице загрузки лежит исполняемый файл для установки. Довольно просто ставится и драйвер захвата пакетов, с помощью которого сетевая карта переходит в «неразборчивый» режим (promiscuous mode позволяет принимать все пакеты независимо от того, кому они адресованы).

Начало работы с фильтрами

С первым перехватом вы увидите в интерфейсе Wireshark стандартный шаблон и подробности о пакете.

Как только захватили сессию HTTP, остановите запись и поиграйте с основными фильтрами и настройками Analyze | Follow | HTTP Stream.

Названия фильтров говорят сами за себя. Просто вводите соответствующие выражения в строку фильтра (или в командную строку, если используете tshark). Основное преимущество фильтров — в удалении шума (трафик, который нам не интерестен). Можно фильтровать трафик по MAC-адресу, IP-адресу, подсети или протоколу. Самый простой фильтр — ввести http , так что будет отображаться только трафик HTTP (порт tcp 80).

Примеры фильтров по IP-адресам

ip.addr == 192.168.0.5 !(ip.addr == 192.168.0.0/24)

Примеры фильтров по протоколу

tcp udp tcp.port == 80 || udp.port == 80 http not arp and not (udp.port == 53)

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

Следуйте за потоком

Как только вы захватили несколько HTTP-пакетов, можно применить на одном из них пункт меню Analyze | Follow | HTTP Stream. Он покажет целиком сессию HTTP. В этом новом окне вы увидите HTTP-запрос от браузера и HTTP-ответ от сервера.

Резолвинг DNS в Wireshark

По умолчанию Wireshark не резолвит сетевые адреса в консоли. Это можно изменить в настройках.

Edit | Preferences | Name Resolution | Enable Network Name Resolution

Как и в случае tcpdump , процедура резолвинга замедлит отображение пакетов. Также важно понимать, что при оперативном захвате пакетов DNS-запросы с вашего хоста станут дополнительным трафиком, который могут перехватить.

Tshark для командной строки

Если вы ещё не баловались с tshark , взгляните на наше руководство с примерами фильтров. Эту программу часто игнорируют, хотя она отлично подходит для захвата сессий на удалённой системе. В отличие от tcpdump , она позволяет на лету захватывать и просматривать сессии прикладного уровня: декодеры протоколов Wireshark также доступны для tshark.

Составление правил для файрвола

Вот быстрый способ создания правил из командной строки, чтобы не искать в интернете конкретный синтаксис. Выберите подходящее правило — и перейдите в Tools | Firewall ACL Rules. Поддерживаются различные файрволы, такие как Cisco IOS, ipfilter , ipfw , iptables , pf и даже файрвол Windows через netsh .

Работа с географической базой GeoIP

Если Wireshark скомпилирован с поддержкой GeoIP и у вас есть бесплатные базы Maxmind, то программа может определять местоположение компьютеров по их IP-адресам. Проверьте в About | Wireshark, что программа скомпилирована с той версией, какая у вас в наличии. Если GeoIP присутствует в списке, то проверьте наличие на диске баз GeoLite City, Country и ASNum. Укажите расположение баз в меню Edit | Preferences | Name Resolution.

Проверьте систему на дампе трафика, выбрав опцию Statistics | Endpoints | IPv4. В колонках справа должна появиться информация о местоположении и ASN для IP-адреса.

Другая функция GeoIP — фильтрация трафика по местоположению с помощью фильтра ip.geoip . Например, так можно исключить трафик из конкретной ASN. Нижеуказанная команда исключает пакеты от сетевого блока ASN 63949 (Linode).

ip and not ip.geoip.asnum == 63949

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

Расшифровка сессий SSL/TLS

Один из способов расшифровки сессий SSL/TLS — использовать закрытый ключ с сервера, к которому подключен клиент.

Конечно, у вас не всегда есть доступ к приватному ключу. Но есть другой вариант простого просмотра трафика SSL/TLS на локальной системе. Если Firefox или Chrome загружаются с помощью специальной переменной среды, то симметричные ключи отдельных сеансов SSL/TLS записаны в файл, который Wireshark может прочитать. С помощью этих ключей Wireshark покажет полностью расшифрованную сессию!

1. Настройка переменной среды

export SSLKEYLOGFILE=~/sslkeylogfile.log

На вкладке System Properties | Advanced нажмите кнопку Environment Variables и добавьте имя переменной (SSLKEYLOGFILE), а в качестве значения — путь к файлу.

2. Настройка Wireshark

Из выпадающего меню выберите Edit | Preferences | Protocols | SSL | (Pre)-Master-Secret Log Filename — Browse, указав файл, который вы указали в переменную среды.

Начинайте захват трафика в локальной системе.

3. Перезапуск Firefox или Chrome

После перехода на сайт HTTPS лог-файл начнёт увеличиваться в размере, поскольку записывает симметричные ключи сессии.

Взгляните на ранее запущенную сессию Wireshark. Вы должны увидеть что-то похожее на скриншот внизу с расшифрованными сессиями. Расшифрованные пакеты — на вкладке в нижней панели.

Другой способ просмотра сеанса — через выпадающее меню Analysis | Follow | Stream | SSL. Если сеанс успешно расшифрован, вы увидите опцию для SSL.

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

Ещё один вариант выхода на базовый HTTP-трафика — использовать инструмент Burp Suite с загруженным сертификатом CA в браузере. В этом случае прокси расшифровывает соединение на стороне клиента, а затем устанавливает новый сеанс SSL/TLS на сервере. Есть много способов проведения такой MiTM-атаки на себя, это два самых простых.

Извлечение файлов из пакетов с помощью функции экспорта (HTTP или SMB)

Файлы легко извлекаются через меню экспорта.

File | Export Objects | HTTP

Все найденные файлы отобразятся в новом окне. Отсюда же можно сохранить отдельные файлы или сразу все. Аналогичный метод применяется для извлечения файлов из сессий SMB. Как мы уже упоминали, это протокол Microsoft Server Message Block, который используется для общего доступа к файлам под Windows.

Строка состояния

Строка состояния в правой части окна позволяет быстро перейти в нужное место сетевого дампа, щёлкнув по цветовому индикатору. Например, красным цветом в строке состояния помечены пакеты с ошибками.

Образец PCAP

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

Настройка окружения

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

Столбцы настраиваются в меню Edit | Preferences | Appearance | Columns. Там же изменяется общий шаблон, шрифт и цвета.

На видео — полезные советы по настройке окружения, в том числе выявление неполадок по порядковым номерам последовательности TCP.

capinfos

В комплекте с Wireshark поставляется удобный инструмент командной строки capinfos . Эта утилита генерирует статистику пакетного дампа, с временем начала/окончания записи и другими подробностями. С опцией -T она выдаёт текст с табуляцией — он подходит для импорта в электронные таблицы или анализа в консоли.

test@ubuntu:~$ capinfos test.pcap File name: test.pcap File type: Wireshark/tcpdump/. - pcap File encapsulation: Ethernet File timestamp precision: microseconds (6) Packet size limit: file hdr: 262144 bytes Number of packets: 341 k File size: 449 MB Data size: 444 MB Capture duration: 3673.413779 seconds First packet time: 2018-12-01 11:26:53.521929 Last packet time: 2018-12-01 12:28:06.935708 Data byte rate: 120 kBps Data bit rate: 967 kbps Average packet size: 1300.72 bytes Average packet rate: 93 packets/s SHA256: 989388128d676c329ccdbdec4ed221ab8ecffad81910a16f473ec2c2f54c5d6e RIPEMD160: 0742b6bbc79735e57904008d6064cce7eb95abc9 SHA1: d725b389bea044d6520470c8dab0de1598b01d89 Strict time order: True Number of interfaces in file: 1

Заключение

Эта статья изначально была опубликована в 2011 году, затем серьёзно обновилась. Если у вас есть какие-либо комментарии, улучшения или советы для шпаргалки, пишите мне. Wireshark — один из тех незаменимых инструментов, который многие используют, но мало кто владеет в совершенстве. Тут можно углубляться всё дальше и дальше.

  • Информационная безопасность
  • Системное администрирование
  • Сетевые технологии
  • Софт

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Фильтры Wireshark

Оглавление

Фильтры Wireshark для начинающих

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

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

Чтобы в полной мере понимать значение фильтров и что именно он показывает, необходимо понимание работы сети. Для знакомства с принципами работы сети и протоколов, рекомендуется изучить цикл о работе компьютерных сетей, первая статья цикла «Компьютерные сети: Часть 1. Как работают компьютерные сети» (остальные части в процессе подготовки).

Некоторые фильтры здесь написаны в общей форме, а некоторые выполнены в качестве конкретных примеров. Помните, что вы в любом случае можете подставить свои данные, например, изменить номер порта на любой вас интересующий, а также сделать то же самое с IP адресом, MAC-адресом, значением времени и пр.

Если вы только начинаете знакомиться с Wireshark, то обратитесь к статье «Как использовать Wireshark для захвата, фильтрации и проверки пакетов».

Операторы фильтров Wireshark

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

Если ищется неточное вхождение (лучше подходит для нечисловых значений) то используется contains. Например, чтобы показать TCP пакеты, содержащие строку hackware нужен следующий фильтр:

tcp contains hackware

Для поиска точных значений используются операторы. Рассмотрим их:

Оператор Описание
==/eq Равно
!=/ne Не равно
Меньше чем
Меньше или равно
>/gt Больше чем
>=/ge Больше или равно

Как можно видеть, имеется по два варианта написания, например, если мы хотим указать, что значение фильтра равно чему-либо, то мы можем использовать == или eq.

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

tcp.port>=8000 && tcp.port

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

tcp.port

Помните об этом баге!

При использовании с == (равно) этот баг отсутствует.

Логические операторы фильтров Wireshark

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

Оператор Описание
and/&& Логическое И, данные выводятся если они соответствуют обоим частям фильтра. Например, фильтр ip.src==192.168.1.1 and tcp покажет только пакеты, которые исходят от 192.168.1.1 и которые ассоциированы с протоколом TCP. Будут показаны только данные, совпадающие с обоими условиями.
or/|| Логическое ИЛИ, достаточно чтобы только одно условие было истинным; если оба являются истинной, то это тоже подходит. Например фильтр tcp.port==80 or tcp.port==8080 покажет TCP пакеты, которые связаны (являются источником или пунктом назначения) с портом 80 или 8080.
not/! Логическое НЕ используется, когда мы хотим исключить некоторые пакеты. То есть будут показаны все пакеты, кроме удовлетворяющие условию, следующему после НЕ. Например фильтр !dns покажет все пакеты, кроме DNS.

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

http or dns

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

!(arp or icmp or dns)

Фильтр интерфейсов

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

frame.interface_name == "wlan0"

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

Для показа ARP трафика:

Показать фреймы ARP протокола, отправленные с устройства, имеющего MAC-адрес 00:c0:ca:96:cf:cb:

arp.src.hw_mac == 00:c0:ca:96:cf:cb

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

arp.src.proto_ipv4 == 192.168.50.90

Показать фреймы ARP протокола, отправленные на устройство, имеющего MAC-адрес 00:00:00:00:00:00 (этот адрес используется когда протокол пытается узнать целевой MAC-адрес. Ещё один популярный адрес, который может вас смутить, это ff:ff:ff:ff:ff:ff, этот адрес является широковещательным, то есть сообщения с этим адресом предназначены для всех устройств локальной сети):

arp.dst.hw_mac == 00:00:00:00:00:00

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

arp.dst.proto_ipv4 == 192.168.50.1

Показать Ethernet трафик:

Показать фреймы (вообще все фреймы, а не только ARP, как это было в предыдущих примерах), отправленные с устройства, имеющего MAC-адрес 00:c0:ca:96:cf:cb:

eth.src == 00:c0:ca:96:cf:cb

Показать фреймы, отправленные на устройство, имеющего MAC-адрес 78:cd:8e:a6:73:be:

eth.dst == 78:cd:8e:a6:73:be

Трафик протоколов межсетевого уровня

Фильтрация IPv4 протокола

Показать IP трафик (сюда относятся TCP, UDP, а также протоколы уровня приложений DNS, HTTP — то есть практически всё, кроме протоколов канального уровня, которые не используют IP адреса для передачи данных (в локальных сетях Ethernet в качестве адресов доставки они используют MAC-адреса)):

ip

Если быть более точным, имеется ввиду трафик протокола IPv4, который обычно называют просто IP (Internet Protocol).

Показать трафик, связанный с определённым IP адресом (впишите его вместо x.x.x.x). Будут показаны пакеты, в которых этот IP адрес является источником данных ИЛИ получателем:

ip.addr == x.x.x.x

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

ip.addr == x.x.x.x && ip.addr == y.y.y.y

Показать трафик, источником которого является хост с IP адресом 138.201.81.199:

ip.src == 138.201.81.199

Показать трафик, адресатом которого является хост с IP адресом 138.201.81.199:

ip.dst == 138.201.81.199

Обратите внимание, IP протокол оперирует IP адресами, но не оперирует портами. Порты являются частью протоколов TCP и UDP. IP протокол отвечает только за маршрутизацию трафика между хостами.

Фильтрация подсетей и диапазонов IP в Wireshark

Вы можете вместо одного IP адреса указать подсеть:

ip.addr == 192.168.1.0/24

Фильтрация трафика, отправленного с определённого диапазона IP. Если нужно отфильтровать трафик, источником которого является подсеть, то используйте фильтр вида:

ip.src == 192.168.1.0/24

Фильтрация трафика, предназначенного для отправки на определённый диапазон IP. Если нужно отфильтровать трафик, пунктом назначения которого является подсеть, то используйте фильтр вида:

ip.dst == 192.168.1.0/24

Фильтрация IPv6 протокола

Показать трафик IPv6 (Internet Protocol шестой версии):

ipv6

Фильтрация по IPv6 адресу. Для фильтрации по IPv6 адресу используйте фильтр:

ipv6.addr == 2604:a880:800:c1::2ae:d001

Фильтрация подсетей и диапазонов IPv6 в Wireshark

Вы можете вместо одного IPv6 адреса указать подсеть для фильтрации:

ipv6.addr == 2604:a880:800:c1::2ae:d000/64

Если нужно отфильтровать трафик, источником которого является определённый IPv6 адрес:

ipv6.src == 2604:a880:800:c1::2ae:d001

Если нужно отфильтровать трафик, отправленный на определённый IPv6 адрес:

ipv6.dst == 2604:a880:800:c1::2ae:d001

Фильтрация трафика, отправленного с определённого диапазона IPv6. Если нужно отфильтровать трафик, источником которого является подсеть, то используйте фильтр вида:

ipv6.src == 2604:a880:800:c1::2ae:d000/64

Фильтрация трафика, предназначенного для отправки на определённый диапазон IPv6. Если нужно отфильтровать трафик, пунктом назначения которого является подсеть, то используйте фильтр вида:

ipv6.dst == 2604:a880:800:c1::2ae:d000/64

Фильтрация ICMPv6 (Internet Control Message Protocol — протокол межсетевых управляющих сообщений шестой версии) в Wireshark делается фильтром:

icmpv6

Как отфильтровать пакеты ARP протокола для IPv6 в Wireshark? Для IPv6 протокол ARP не требуется, поскольку его роль выполняет протокол обнаружения соседей (Neighbor Discovery Protocol, NDP) средствами ICPM6 — подробности объяснены в статье «IPv6 аналог для «arp -an» в IPv4».

Для того, чтобы увидеть пакеты, которые выполняют роль ARP для IPv6, используйте фильтр:

icmpv6.type == 133 or icmpv6.type == 134 or icmpv6.type == 135 or icmpv6.type == 136 or icmpv6.type == 137

Другие фильтры с IP адресом аналогичны для IPv6 и IPv4.

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

Чтобы увидеть только трафик TCP:

Показать трафик, источником или портом назначения которого является определённый порт, например 8080:

tcp.port==8080

Показать трафик, источником которого является порт 80:

tcp.srcport == 80

Показать трафик, который отправляется службе, прослушивающей порт 80:

tcp.dstport == 80

Показать TCP пакеты с включённым флагом SYN:

tcp.flags.syn==1

Показать TCP пакеты с включённым флагом SYN и отключённым флагом ACK:

tcp.flags.syn==1 && tcp.flags.ack==0

Аналогично и для других флагов:

tcp.flags.syn==1
tcp.flags.ack==1
tcp.flags.reset==1
tcp.flags.fin==1
tcp.flags.cwr==1
tcp.flags.ecn==1
tcp.flags.urg==1
tcp.flags.push==1
tcp.flags.ns==1

Также можно использовать синтаксис вида tcp.flags == 0x0XX, например:

  • FIN это tcp.flags == 0x001
  • SYN это tcp.flags == 0x002
  • RST это tcp.flags == 0x004
  • ACK это tcp.flags == 0x010
  • Установленные одновременно ACK и FIN это tcp.flags == 0x011
  • Установленные одновременно ACK и SYN это tcp.flags == 0x012
  • Установленные одновременно ACK и RST это tcp.flags == 0x014

Длина заголовка (смещение данных):

tcp.hdr_len == 32 tcp.hdr_len == 52 tcp.hdr_len > 32

Пакеты с установленными зарезервированными битами:

tcp.flags.res == 1
tcp.window_size_value == 11 tcp.window_size_value == 4468 tcp.window_size_value > 65000 tcp.window_size_value < 100

Вычесленный размер окна:

tcp.window_size == 45056 tcp.window_size == 11

Фактор масштабирования размера окна:

tcp.window_size_scalefactor == 4096

tcp.window_size_value — это необработанное значение размера окна, считываемое непосредственно из заголовка TCP, тогда как tcp.window_size — это вычисленный размер окна, который основан на том, применимо ли масштабирование окна или нет. Если масштабирование окна не используется или коэффициент масштабирования равен 1 или неизвестно, применимо ли масштабирование окна или нет, потому что трёхэтапное рукопожатие TCP не было захвачено, тогда эти два значения будут одинаковыми. С помощью tcp.window_size_scalefactor вы можете определить, какое из этих условий применимо — если его значение равно -1, то оно неизвестно, если его значение равно -2, тогда масштабирование окна не используется, а все остальные значения представляют фактический размер фактора масштабирования окна.

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

tcp contains hackware

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

tcp.stream eq X

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

tcp.seq == x

Показать повторные отправки пакетов. Помогает прослеживать замедление производительности приложений и потери пакетов:

tcp.analysis.retransmission

Этот фильтр выведен проблемные пакеты (потерянные сегменты, повторную отправку и другие. Этот фильтр проходят пакеты TCP Keep-Alive, но они не являются показателем проблем.

tcp.analysis.flags

Фильтры для оценки качества сетевого подключения.

Следующие характеристики относятся к TCP фреймам. Причём они не основываются на заголовках фрейма — рассматриваемые характеристики (пропуск данных, дубли) присвоены программой Wireshark исходя из анализа.

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

tcp.analysis.duplicate_ack_num == 1

Фильтр показа фреймов для которых не захвачен предыдущий сегмент:

tcp.analysis.ack_lost_segment

Это нормально в начале захвата данных — поскольку информация перехватывается не с самого начала сессии.

Для показа фреймов, которые являются ретрансмиссией (отправляются повторно):

tcp.analysis.retransmission

Вывод фреймов, которые получены не в правильном порядке:

tcp.analysis.out_of_order

Чтобы увидеть только трафик UDP:

Для UDP не используются флаги. Для этого протокола можно только указать порт.

Показать трафик, источником которого является порт 53:

udp.srcport == 53

Показать трафик, который отправляется службе, прослушивающей порт 53:

udp.dstport == 53

UDP пакет, в котором встречается определённая строка, например, строка hackware:

udp contains hackware

Порт назначения ИЛИ исходный порт:

udp.port == 53 udp.port > 40000 udp.port < 30
udp.length == 60 udp.length > 50000

Время между пакетами (для выявления проблем сети):

udp.time_delta > 1.5

Номер потока (запрос-ответ):

udp.stream == 5
udp.possible_traceroute

Чтобы увидеть только трафик ICMP:

icmp

Чтобы увидеть только трафик ICMP v6 (шестой версии)

icmpv6

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

icmp.type==0

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

icmp.type==8

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

icmp.type==3

Показать все попытки перенаправить маршрутизацию с использованием ICMP:

icmp.type==8

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

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

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

Для протоколов приклодного уровня HTTP, DNS, SSH, FTP, SMTP, RDP, SNMP, RTSP, GQUIC, CDP, LLMNR, SSDP, VNC, RDP и пр. имеются фильтры, которые называются как и сами протоколы, но пишутся маленькими буквами.

Например, чтобы увидеть HTTP трафик:

http

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

http2

Помните, что при принятии решения, к какому протоколу относятся передаваемые данные, программа исходит из номера используемого порта. Если используется нестандартный порт, то программа не сможет найти нужные данные. Например, если было выполнено подключение к SSH по порту 1234, то фильтр ssh не найдёт SSH трафик.

Фильтр, который показывает только данные, переданные методом POST:

http.request.method == "POST"

Фильтр, который показывает только данные, переданные методом GET:

http.request.method == "GET"

Поиск запросов к определённому сайту (хосту):

http.host == ""

Поиск запросов к определённому сайту по части имени:

http.host contains "здесь.частичное.имя"

Фильтр для вывода 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"

Поиск в Wireshark запросов на получения файлов определённого типа. Например, для поиска переданных ZIP архивов:

http.request.uri contains "zip"

Вместо http.request.uri для большей точности можно использовать фильтры http.request.uri.path или http.request.uri.query, например, для поиска запросов на скачивание файлов JPG (ссылки на картинки):

http.request.uri.path contains "jpg"

Также вы можете отфильтровать запросы, содержащие определённое значение HTTP заголовка REFERER (реферер). Например, для поиска запросов, в которых реферером является ru-board.com:

http.referer contains "ru-board.com"

Поиск запросов с любой авторизацией. Аналогично с помощью contains можно искать определённые виды авторизации:

http.authorization

Поиск файлов в HTTP потоке:

http.file_data

Чтобы увидеть, какие HTTP данные получены с задержкой, используется следующая конструкция:

http.time>1

Она покажет трафик, полученный позднее чем через 1 секунду.

Для исследования проблем, можно анализировать статус HTTP кодов ответа. Например, следующий фильтр покажет трафик, при котором получена ошибка 404 Not Found (страница не найдена):

http.response.code==404

Следующий фильтр очень интересный. Во-первых, он показывает какие сложные конструкции можно строить из отдельных фильтров. Во-вторых, он позволяет исследовать HTTP запросы и в целом веб активность, исключая лишние данные. С помощью этого фильтра вы можете просматривать веб-активность высокого уровня. Правила внутри скобок исключают изображения, файлы Javascript и таблицы стилей — всё, что страница запрашивает внутри себя. Если исследуемые страницы содержат другие встроенные объекты, то исключите их похожим образом:

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")

Фильтрация полей HTTP заголовков: некоторые из рассмотренных чуть выше фильтров уже относятся к фильтрам HTTP заголовков, рассмотрим ещё несколько примеров.

Помните, что можно использовать фильтр не указав искомое значение, например:

http.host

В этом случае будут показаны все соединения, имеющие любое значение поля Host в HTTP заголовке.

Можно указать точное значение:

http.host == "www.archlinux.org"

Или указать часть искомой строки:

http.host contains "archlinux.org"

Фильтр по полю Host в HTTP заголовке:

http.host == "www.archlinux.org"

Фильтр по полю Content-Type в HTTP заголовке:

http.content_type == "text/plain"

Фильтр по полю Server в HTTP заголовке:

http.server == "nginx"

Фильтры по полю Cookie в HTTP заголовке:

http.cookie http.cookie_pair

Фильтр по полю User Agent в HTTP заголовке:

http.user_agent == "Mozilla/5.0 (X11; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0"

Фильтр по полю X-Powered-By в HTTP заголовке:

http.x_forwarded_for

Для поиска переадресаций (поле Location):

http.location

Для поиска сайтов, с которых сделан переход на страницу (поле Referer):

http.referer contains "hackware.ru"
http.request http.request.uri http.request.uri.path http.request.uri.query. http.request.uri.query.parameter http.request.method
http.response

Поиск по коду ответа:

http.response.code == 404 http.response.code != 200

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

Чтобы показать только трафик на основе TLS (зашифрованные данные):

tls.handshake
tls.handshake.certificates

Поиск по содержимому сертификатов:

tls.handshake.certificate contains "*.hackware.ru"

Имеется много фильтров TLS, но нужно понимать, что мы не можем искать по содержимому передаваемых зашифрованных данных (по очевидным причинам — данные зашифрованы). Можно выполнять поиск по различным свойствам, а также по содержимому, передающемуся в незашифрованном виде, например, по сертификатам.

Чтобы увидеть все DNS запросы и ответы:

Чтобы увидеть, какие DNS запросы заняли много времени:

dns.time>1

Будут показаны ответы, пришедшие более чем через секунду после отправки запроса.

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

dns.flags.rcode != 0

Показать только DNS запросы:

dns.flags.response == 0

Показать только DNS ответы:

dns.flags.response == 1

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

dns.qry.name == "google.com"

Показать 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:

udp.dstport==67
bootp.option.dhcp

Чтобы показать DHCP запросы:

bootp.option.dhcp == 3

Чтобы показать DHCP Discover:

bootp.option.dhcp == 1

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

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

NetBIOS фильтры

Фильтр Wireshark для службы имён (NetBIOS-NS):

nbns

Фильтр Wireshark для службы рассылки дейтаграмм (NetBIOS-DGM):

nbdgm

Фильтр Wireshark для службы сеанса (NetBIOS-SSN):

nbss

VNC

Чтобы показать только трафик VNC сессий:

VNC challenge (вызов):

vnc.auth_challenge

VNC response (ответ):

vnc.auth_response

Результат попытки аутентификации на VNC сервере:

vnc.auth_result

Вызов, ответ и результат попытки аутентификации на VNC сервере:

vnc.auth_challenge or vnc.auth_response or vnc.auth_result

Имя компьютера с VNC сервером:

vnc.desktop_name

Позиция кнопок мыши:

vnc.button_1_pos vnc.button_2_pos …………. vnc.button_8_pos

Выбранный тип безопасности:

vnc.client_security_type
vnc.client_set_encodings_encoding_type

Версия VNC протокола клиента:

vnc.client_proto_ver

Версия VNC протокола сервера:

vnc.server_proto_ver
vnc.width
vnc.key
vnc.key_down

Данные передаваемого видео в формате H.264:

vnc.h264_data
vnc.client_cut_text

Remote Desktop Protocol (RDP)

Чтобы показать только трафик RDP сессий:

Фильтры Wireshark для HTTP Basic и Digest аутентификации

Wireshark может фильтровать сессии аутентификации. Для этого имеются следующие фильтры:

Все сессии аутентификации (BASIC/DIGEST/NTLM):

http.authorization

Только HTTP Basic аутентификация:

http.authbasic

Только HTTP Basic аутентификация с определёнными учётными данными:

http.authbasic == "ЛОГИН:ПАРОЛЬ"

Фильтры Wireshark для анализа трафика через веб прокси-сервер

Этот фильтр покажет запросы от прокси на HTTP Digest аутентификацию:

http.proxy_authenticate

Этот фильтр покажет учётные данные, отправляемые клиентом на прокси-сервер для авторизации:

http.proxy_authorization

Показ запросов, сделанных через прокси-сервер (HTTP метод CONNECT):

http.request.method == "CONNECT"

Поскольку для аутентификации пользователей веб-прокси используют HTTP Basic и Digest аутентификации, то можно использовать соответствующие фильтры Wireshark. Все сессии аутентификации (BASIC/DIGEST/NTLM):

http.authorization

Только HTTP Basic аутентификация:

http.authbasic

Только HTTP Basic аутентификация с определёнными учётными данными:

http.authbasic == "ЛОГИН:ПАРОЛЬ"

Запрос Digest аутентификации от прокси-сервера:

http.proxy_authenticate contains "Digest"

Ответ пользователя передаваемый на прокси-сервер с информацией для Digest авторизации:

http.proxy_authorization contains "Digest"

Фильтры для Wi-Fi фреймов

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

eapol

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

wlan.fc.type_subtype == 0x08

Показать фреймы Probe Response:

wlan.fc.type_subtype == 0x05

Показать всё сразу: EAPOL, маяки, Probe Response:

wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol

Показать беспроводные фреймы для определённого устройства с MAC-адресом BSSID:

wlan.addr==BSSID

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

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr==28:28:5D:6C:16:24

Показ всех PMKID:

eapol && wlan.rsn.ie.pmkid
wlan.rsn.ie.pmkid

Показать PMKID с определённым значением:

wlan.rsn.ie.pmkid == 21:89:fa:52:75:df:e9:f5:56:f3:2e:e5:4b:86:b7:8f

Показать PMKID, маяки, Probe Response:

(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:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid)) && wlan.addr==40:3D:EC:C2:72:B8

Показать только первое сообщение рукопожатия:

wlan_rsna_eapol.keydes.msgnr == 1

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

wlan_rsna_eapol.keydes.msgnr == 2

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

wlan_radio.data_rate == 1

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

wlan_radio.data_rate > 10

Показать данные относящиеся к частотам диапазона 2 GHz:

radiotap.channel.flags.2ghz == 1

Показать данные относящиеся к частотам диапазона 5 GHz:

radiotap.channel.flags.5ghz == 1

Показать захваченные данные на определённом канале:

wlan_radio.channel == 44

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

radiotap.channel.freq == 2412

Показывать точки доступа с определённым уровнем сигнала:

wlan_radio.signal_dbm > -50

Фильтры, связанные с наличием у устройства антены:

radiotap.present.antenna == 1
radiotap.antenna == 1

Полный перечень фильтров заголовков IEEE 802.11 Radiotap Capture: https://www.wireshark.org/docs/dfref/r/radiotap.html

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

Связанные статьи:

  • Руководство по tcpdump (89.7%)
  • Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2) (50%)
  • Транспортные протоколы TCP и UDP (50%)
  • Атаки на прокси-сервер (47.4%)
  • Перехват и анализ трафика в открытых Wi-Fi (46.8%)
  • IronWASP: бесплатный сканер уязвимостей веб-сайтов под Windows с графическим интерфейсом (RANDOM - 5.5%)

факультете информационной безопасности от GeekBrains? Комплексная годовая программа практического обучения с охватом всех основных тем, а также с дополнительными курсами в подарок. По итогам обучения выдаётся свидетельство установленного образца и сертификат. По этой ссылке специальная скидка на любые факультеты и курсы!

Wireshark — приручение акулы

Wireshark — это достаточно известный инструмент для захвата и анализа сетевого трафика, фактически стандарт как для образования, так и для траблшутинга.
Wireshark работает с подавляющим большинством известных протоколов, имеет понятный и логичный графический интерфейс на основе GTK+ и мощнейшую систему фильтров.
Кроссплатформенный, работает в таких ОС как Linux, Solaris, FreeBSD, NetBSD, OpenBSD, Mac OS X, и, естественно, Windows. Распространяется под лицензией GNU GPL v2. Доступен бесплатно на сайте wireshark.org.
Установка в системе Windows тривиальна — next, next, next.
Самая свежая на момент написания статьи версия – 1.10.3, она и будет участвовать в обзоре.

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

Начинаем плаванье

Для начала захвата достаточно выбрать свой сетевой интерфейс и нажать Start.

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

А следующая за ними кнопка позволяет сделать быстрый переход к пакету, указав его номер.
В случае если колонки перекрываются и наползают друг на друга, можно кликнуть по такой колонке правой кнопкой мыши и выбрать “Resize Column”.
Произойдет автоматическая подгонка размеров под текущую ситуацию.
И кроме того, есть кнопка “Resize all Columns”, которая приведет в порядок все колонки.
Используя меню View – Time Display Format, можно, например, настроить, чтобы отсчет времени шел не с начала захвата, а с момента получения предыдущего пакета (Since Previous Captured Packet).
Самое важное в каждой программе (Help – About Wireshark) покажет не только версию и список авторов, но и содержит закладку Folders, которая покажет пути размещения каталогов с конфигурациями.
Изучая интерфейс, можно выбрать, например, пакет http, и увидеть, что HTTP инкапсулируется в TCP (транспортный уровень), TCP инкапсулируется в IP (сетевой уровень), а IP в свою очередь инкапсулируется в Ethernet (перед этим даже мелькает 802.1Q).

И на самом верху идет нечто вроде небольшого обзора собранной информации о кадре.

Про фильтры мы поговорим дальше, а на данном этапе, если нужно быстро отфильтровать лишние пакеты, достаточно сделать правый клик на пакете, выбрать меню Apply as Filter – Not selected и изменения сразу же вступят в силу.
Если нужно еще что-то убрать, то в следующий раз выбирать “and not Selected”, и новое правило просто добавится к фильтру.

Убираем заусенцы

Довольно часто при работе с Wireshark возникает ошибка IP checksum offload – ошибка контрольной суммы заголовка IP пакета.

Современные сетевые карты насколько умные, что сами считают контрольную сумму, зачем это делать на уровне стека TCP/IP программно, если можно делать хардварно.
А Wireshark натурально перехватывает пакеты, до того как они попадают в сеть.
И до того как эта сумма была просчитана и была добавлена в заголовок пакета.
Соответственно есть два пути решения этой проблемы — выключать функцию offload в настройках сетевой карты или в настройках сниффера указать, чтобы он не обращал внимание на это значение.
Хардваные функции зачастую лучше софтварных, в основном из-за скорости обработки (в железе обычно выше) поэтому лучше изменить настройки самого сниффера.
Для этого нужно зайти в настройки (Edit — Preferences), затем Protocols – IPv4 – и снять флаг с “Validate IPv4 checksum if possible”.

  • Локально на своем хосте;
  • Организовать зеркалирование трафика на коммутаторе;
  • Подключаться непосредственно в интересующие места;
  • или же отравление протокола ARP (еще более незаконно, чем пассивное прослушивание трафика)

Фильтруем поток

Wireshark содержит два вида фильтров – захвата (Capture Filters) и отображения (Display Filters).
Вначале рассмотрим Capture Filters.
Как можно догадаться по названию, они служат для фильтрации еще на этапе захвата трафика.
Но в таком случае, безусловно, можно безвозвратно потерять часть нужного трафика.
Фильтр представляет собой выражение, состоящее из встроенных значений, которые при необходимости могут объединяться логическими функциями (and, or, not).
Для того, чтобы его задействовать, нужно зайти в меню Сapture, затем Options, и в поле Capture Filter набрать, например, host 8.8.8.8 (или, например, net 192.168.0.0./24)

Так же, конечно, можно выбрать и заранее созданный фильтр (за это отвечает кнопка Capture Filter).
В любом из вариантов фильтр появится возле интерфейса, можно жать Start.

Теперь перейдем к Display Filters.
Они фильтруют исключительно уже захваченный трафик.
Что можно фильтровать?
— Практически все — протоколы, адреса, специфические поля в протоколах.
Операции, которые можно использовать при построении фильтров:

Команда Значение Пример использования
== равенство ip.dst == 193.168.3.10
!= Не равно udp.dst != 53
меньше чем ip.ttl < 24
> больше чем frame.len > 10
меньше или равно frame.len
>= больше или равно tcp.analysis.bytes_in_flight >= 1000
matches регулярные выражения frame matches "[Pp][Aa][Ss][Ss]"
contains содержит dns.resp.name contains google

Как вы, наверное, заметили, в таблице в качестве примеров были разнообразные выражения, достаточно понятные и зачастую говорящие сами за себя.
Например, ip.dst – это поле протокола IP.
Чтобы увидеть это поле, можно просто посмотреть на пакет, и в нижней части окна можно увидеть его значение, которое потом можно применять в любом фильтре.
Например, нас интересует, как создать фильтр, где будет проверяться значение TTL.
Для этого раскрываем L3 часть и становимся на соответствующее поле:

И видим, что для построения фильтра, нужно использовать выражение ip.ttl.
Если начать набирать фильтр, то после точки автоматически появится список возможных значений:

Чтобы применить фильтр, достаточно нажать enter или кнопку Apply.
Само поле для ввода фильтра может менять цвет в зависимости от того, что было набрано.
Зеленый цвет означает, что все в порядке. Красный — допущена ошибка, желтый — получен неожиданный результат, потому что существуют другие варианты написания фильтра (например можно написать ip.dst != 8.8.8.8 или же !ip.dst == 8.8.8.8, именно второй вариант более предпочтительный).
Фильтры можно сохранять для дальнейшего использования, нажав кнопку Save, затем ввести произвольное название

и после нажатия на кнопку ОК фильтр появится как кнопка на панели.

А если кликнуть на расположенную неподалеку кнопку «Expression…», то откроется достаточно мощный конструктор выражений, по которому можно чуть ли не изучать сетевые протоколы. Количество поддерживаемых протоколов постоянно увеличивается.

Как уже упоминалось ранее, можно выделить любой пакет и в контекстном меню выбрать Apply as Filter и в подменю выбрать режим — selected или not selected и соответственно сразу же появится фильтр, который будет показывать только выбранное или наоборот уберет выбранное с экрана.
Таким образом можно гибко выбирать, что видеть на экране, а что — нет.
Это может быть определенный ip-адрес, ttl, порт, dns ответ и многое другое.
Кроме того, есть два варианта для таких быстрых фильтров — Prepare as Filter и Apply as Filter.
Как можно догадаться по названию — разница заключается в том, что в первом случае только появится в поле для ввода Display Filter, но не применится (удобно, если например, добавлять таким способом несколько фильтров, а затем сразу применить готовый результат), а во втором — сразу же и применится.

Фильтры можно объединять, используя знакомые по булевой алгебре логические операции:
(dns) && (http) логическое и

(dns) || (http) это логическое или

Таким образом можно строить большие и сложные фильтры вроде:
(tcp.flags.syn==1) && (ip.src == 172.16.10.2) && (ip.dst == 172.16.10.1)
Здесь видим, что выбираются только TCP SYN сегменты, только с определенным адресом отправителя и получателя. При составлении больших фильтров нужно помнить, что фильтр по сути — логическое выражение, и если оно истинно, то пакет отобразится на экране, если ложно — нет.

Ныряем глубже

Достаточно частая ситуация, когда возникают жалобы на медленную работу сети, причин этого может быть множество.
Попробуем разобраться, в чем может быть причина, и рассмотрим два способа.
Первый состоит в добавлении колонки TCP delta.
Открываем пакет, находим поле Time since previous frame in this TCP frame, правый клик и выбираем Apply as Column. Появится новая колонка.
На ней можно кликнуть правой кнопкой мыши и выбрать режим сортировки, например, Sort Descending.

И сразу же рассмотрим второй способ.
Относительно недавно (в версии 1.10.0) появился фильтр tcp.time_delta, который, собственно, учитывает время с момента последнего запроса.

Если клиент делает запрос и получает ответ через 10 миллисекунд, и клиент говорит, что у него все медленно работает, то, возможно, проблема у самого клиента.
Если же клиент делает запрос и получает ответ через 2-3 секунды, тут уже, возможно, проблема кроется в сети.

Еще глубже

Если посмотреть в TCP пакет (или сегмент если быть точным), то можно увидеть там Stream index, который начинается обычно с нуля.
Само поле будет называться tcp.stream.

По нему можно сделать правый клик и создать фильтр.

Таким образом можно фильтровать нужные соединения.

Еще один способ – сделать правый клик на самом пакете, выбрать Conversation Filter и создать фильтр для l2 l3 l4 уровня соответственно.

В итоге мы опять увидим взаимодействие двух хостов.

И третий вариант — это одна из самых интересных фич — Follow TCP Stream.
Для того чтобы его задействовать, нужно опять таки кликнуть правой кнопкой мыши на пакете и выбрать “Follow TCP Stream”. Появится окно, где будет наглядно продемонстрирован весь обмен между двумя узлами.

Если же зайти в меню Statistics – Conversations, то, выбирая закладки, можно увидеть статистику по таким “разговорам” и различные сессии, при этом можно отсортировать их по различным колонкам, например, по количеству переданных данных.

И прямо в этом окне можно правой кнопкой взывать контекстное меню и опять же применить как фильтр.

Со временем приходит опыт

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

Нажатие на эту кнопку приведет к открытию окна Expert Infos.
Того же результата можно добиться, пройдя в меню Analyze – Expert Info.

В этом окне будет содержаться информация по найденным пакетам, разбитая на группы Errors, Warnings, Notes и Chats.
Цветовая раскраска для этих групп выглядит следующим образом:
Ошибки — красный цвет
Предупреждения — желтый
Примечания — сине-зелёный (cyan)
Чат — серый

Wireshark содержит в себе мощный анализатор и умеет автоматически обнаруживать большое количество проблем, возникающих в сети.
Как вы уже могли заметить, буквально везде можно использовать фильтры и Expert Info не является исключением.
Для того чтобы создать такой фильтр, нужно использовать конструкцию expert.severity.
Например, expert.severity==error.

Грабим трафик!

Можно ли с помощью Wireshark узнать, что было скачано?
Да, можно. И сейчас это увидим.
Вначале возьмем HTTP трафик.
Сделаем правый клик по HTTP пакету — Protocol Preferences – и видим тут массу опций, которые непосредственно влияют на извлечение файлов из веб трафика.
Для того чтобы увидеть, что можно извлечь из текущего дампа нужно перейти в меню File – Export Objects – HTTP.
Появится окно, которое покажет все захваченные http объекты — текстовые файлы, картинки и т.д. Для того чтобы вытащить любой файл из этого списка, достаточно просто выделить его и нажать Save As.

Как можно заметить, рисунок был извлечен без каких-либо проблем.

Таким же способом, можно извлекать и потоковое видео/аудио.

Но на этом возможности Wireshark не заканчиваются!
Он умеет вытаскивать файлы и с протокола FTP.
Для этого можно использовать знакомый уже Follow TCP Stream.
В итоге отобразится только обмен по протоколу FTP, в котором нужно будет найти строку RETR, что собственно и будет означать передачу файла.

Затем опускаемся дальше, находим пакеты уже непосредственно с файлом (FTP-DATA) и опять выбираем Follow TCP Stream, видим содержимое файла, жмем Save As и сохраняем.

VoIP

Wireshark имеет несколько встроенных функций для работы с этой технологией.
Он поддерживает массу голосовых протоколов — SIP, SDP, RTSP, H.323, RTCP, SRTP и другие.
И, конечно же, умеет перехватывать и сохранять голосовой трафик для дальнейшего прослушивания.
Этот функционал как нельзя лучше подойдет для траблшутинга в сетях Voice over IP.
Меню Statistics — Flow Graph покажет наглядную картину, как происходил весь обмен пакетами.

А вообще целое меню Telephony отведено для работы с голосовым трафиком.
Например, Telephony – RTP – Show All Streams покажет подробно, что происходило с RTP, в частности jitter (параметр, который, вероятно, самый важный в голосе), что иногда сразу скажет о наличии проблем.

Нажав на кнопку “Analyze”, можно открыть окно RTP stream Analysis – и, выбрав там поток, можно его даже проиграть, используя кнопку player.
Сначала отроется окно проигрывателя, в котором вначале нужно установить подходящее значение jitter и использовать кнопку decode.

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

Так же существует еще один способ прослушивания голосовых звонков — можно зайти в меню Telephony – VoIP Calls.

Откроется окно со списком совершенных звонков, где опять же можно нажать кнопку player, отменить нужные разговоры флажками и нажать play.
Для того чтобы добиться приемлемого качества звучания, потребуется проиграться со значением поля jitter buffer, меняя его значение.

Небольшое отступление

Некоторое время назад появился сайт CloudShark.org.

Это тот самый сниффер Wireshark, но реализованный в виде онлайн-сервиса. Очевидно, что с его помощью не удастся захватывать сетевой трафик, но выполнять анализ дампа трафика – вполне. Загрузив туда через форму PCAP-файл на анализ, можно будет получить четкую последовательность пакетов, в которой всё данные будут разбиты на понятные поля в зависимости от протокола. В общем, тот же Wireshark, но немного облегченный и доступный из любого браузера.

Финальная битва

Напоследок рассмотрим как выглядит сканирование портов.
Смотрим на дамп и видим, что вначале происходит ARP запрос и затем непосредственно начинается сканирование. Адрес нашего маршрутизатора 192.168.10.11, сканирование идет с адреса 192.168.10.101

Это, так называемое, SYN сканирование, когда идут SYN-пакеты на указанный диапазон портов. Так как большинство портов закрыто, маршрутизатор отвечает пакетами RST, ACK.
Пролистав чуть ниже видим, что открыт telnet (tcp 23).

На это указывает то, что маршрутизатор ответил пакетом SYN, ACK.
К слову, для фильтрации портов в сниффере можно использовать конструкции вида: tcp.srcport, tcp.dstport и tcp.port. Для протокола UDP всё аналогично — udp.srcport, udp.dstport, udp.port.

Итоги

Мы пробежались по самым основным частям функционала лучшего анализатора пакетов.
Получилось несколько сумбурно, вероятно, потому что хотелось затронуть как можно больше его возможностей и не упустить ничего важного.
Оказалось, что анализатор пакетов, как отладчик и дизассемблер, демонстрирует мельчайшие подробности работы сети и сетевых протоколов.
Используя Wireshark и обладая необходимыми знаниями (которые можно почерпнуть изучив серию Сетей для Самых Маленьких на сайте linkmeup.ru) можно достаточно эффективно находить и диагностировать разнообразные проблемы, возникающие в сети.

В процессе написания использовались материалы сайта wiki.wireshark.org
Дампы с трафиком брались из разных источников, больше всего с сайта packetlife.net

  • wireshark
  • сети для самых маленьких
  • Информационная безопасность
  • Системное администрирование
  • Сетевые технологии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *