Практические приёмы работы в Wireshark

https://jvns.ca/blog/2018/06/19/what-i-use-wireshark-for/
  • Перевод
Джулия Эванс, автор материала, перевод которого мы сегодня публикуем, решила рассказать об одном из своих любимых сетевых инструментов, который называется Wireshark. Это — мощная и сложная программа, оснащённая графическим интерфейсом, предназначенная для анализа трафика в компьютерных сетях. Джулия говорит, что на практике пользуется лишь немногими возможностями Wireshark, но они обычно оказываются очень кстати. Здесь она хочет поделиться со всеми желающими рассказом о самых полезных приёмах работы с программой и надеется, что они пригодятся не только ей, но и всем, кому приходится решать сетевые проблемы.



Установка Wireshark


Дистрибутивы Wireshark для различных операционных систем можно найти здесь. Для инсталляции программы можно скачать и установить соответствующий файл. Кроме того, если вы пользуетесь дистрибутивами Linux, основанными на Debian, можете воспользоваться командой sudo apt install wireshark. При желании, для того, чтобы найти самую свежую версию программы, вы можете обратиться к персональному архиву пакетов wireshark-dev.

Вот как выглядит интерфейс программы.


Интерфейс Wireshark

На первый взгляд всё это может показаться слишком сложным: длинный список пакетов, таинственное поле для ввода каких-то запросов… Как же работать с Wireshark?

Анализ pcap-файлов


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

  1. Захват пакетов с помощью tcpdump (обычно — с помощью команды наподобие sudo tcpdump port 443 -w output.pcap).
  2. Копирование pcap-файла на рабочий ноутбук (scp host:~/output.pcap .).
  3. Открытие pcap-файла с помощью Wireshark (wireshark output.pcap).

Как видите, всё очень просто. Однако, после того, как pcap-файл открыт в программе, у вас может возникнуть закономерный вопрос о том, что со всем этим делать. Поговорим об этом.

Анализ TCP-соединений


Часто, когда я анализирую в Wireshark некую ситуацию, мне нужно проверить какое-то конкретное TCP-соединение, с которым, по какой-то причине, что-то не так. Благодаря Wireshark можно проанализировать весь жизненный цикл отдельного TCP-соединения и выяснить причины неправильного поведения системы.

Сделать это можно, щёлкнув правой кнопкой мыши по интересующему вас пакету и выбрав в контекстном меню команду Conversation filter > TCP.


Начало анализа TCP-соединения

После этого Wireshark покажет другие пакеты из того же TCP-соединения, к которому принадлежит тот пакет, по которому вы щёлкнули. На рисунке ниже можно видеть пример успешного SSL-соединения — тут присутствуют пакеты client hello, service hello, certificate, server key exchange, которые используются для установления SSL-соединений.


Анализ TCP-соединения

Рассматриваемую здесь методику анализа TCP-пакетов мне пришлось использовать в день написания этой статьи, на работе. Некоторые соединения сбрасывались, и я заметила, что после отправки пакета client hello клиент отправлял пакет FIN ACK, который завершал TLS-соединение. То, что мне удалось выяснить, оказалось полезным, так как стало ясно, что соединения завершает клиент, а не сервер. В результате я тут же узнала, что проблема кроется на клиенте, и мне нужно обратить внимание именно на него.

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

Команда Decode as


Для того чтобы понять, чем именно является конкретный пакет, Wireshark использует номера портов, и обычно этот подход срабатывает. Например, если программа видит некий трафик на порте 80, она решает, что это HTTP-трафик и обычно так оно и есть.

Однако иногда HTTP-соединения используют необычные порты, в результате, для того, чтобы их распознать, Wireshark нуждается в подсказках. Такие подсказки можно давать программе, вызывая контекстное меню пакета и выбирая там команду Decode as. Далее, можно сообщить Wireshark о том, какой протокол используется для передачи пакетов с использованием некоего порта. Подобные подсказки упрощают анализ данных.

Просмотр содержимого пакетов


В Wireshark имеется просто восхитительный режим просмотра подробных сведений о пакете, с помощью которого можно разобраться в содержимом любого пакета. Возьмём, например, пакет с сообщением client hello из предыдущего примера. Это — первый пакет SSL-соединения, клиент с его помощью как бы говорит: «Привет! Вот он я!».

Wireshark даёт сетевому администратору два невероятно полезных инструмента для исследования содержимого пакетов. Первый — это режим просмотра, в котором можно раскрывать заголовки, имеющиеся у пакета (например — Ethernet-заголовок, IP-заголовок, TCP-заголовок) и просматривать их содержимое.


Анализ заголовков пакета

Второй режим просмотра пакетов — это настоящее чудо. Здесь можно видеть необработанные данные пакета в виде последовательности байтов. И, что особенно приятно, если навести мышь на какой-нибудь байт (например, на рисунке ниже указатель наведён на байт, входящий в tiles.services.mozilla.com), программа, в строке состояния, сообщит о том, к какому полю относится этот байт (в данном случае это — поле Server Name), и о кодовом имени, используемом Wireshark для этого поля (в данном случае — ssl.handshake.extensions_server_name)


Анализ необработанных данных пакета

Поиск пакетов


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

  • Запрос frame contains "mozilla" позволяет выполнить поиск строки mozilla в любом месте пакета и вывести список найденных пакетов.
  • Запрос tcp.port == 443 выводит пакеты, использующие TCP-порт 443.
  • Запрос dns.resp.len > 0 выводит все DNS-ответы
  • Запрос ip.addr == 52.7.23.87 выводит пакеты, IP-адрес источника или получателя которых равен 52.7.23.87.

Язык запросов Wireshark обладает гораздо большими возможностями, нежели язык запросов tcpdump (и, кроме того, поддерживает автозавершение по нажатию клавиши TAB). В результате часто я применяю следующую последовательность действий: захватываю большой объём пакетов с помощью tcpdump (скажем, нечто вроде всех пакетов с 443-го порта), а затем тщательно изучаю их с использованием Wireshark.

Просмотр сведений о продолжительности TCP-соединений


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

Если выбрать в главном меню программы пункт Statistics, а в нём — команду Conversations, Wireshark предоставит нам замечательный набор статистических сведений.


Статистические сведения

В частности здесь, в колонке Duration, можно увидеть длительность TCP-соединений, выявить самые длительные из них и внимательно их изучить. Это весьма полезная возможность.

Обновление Wireshark


Если вы давно не обновляли Wireshark — это стоит сделать. Например, недавно я, на рабочем ноутбуке, занималась исследованием HTTP/2-пакетов. Мне тогда пришлось нелегко, и я решила посмотреть документацию. Как оказалось, у меня была старая версия программы. В установленном мной обновлении была серьёзно улучшена поддержка HTTP/2, то есть, там было как раз то, что мне было тогда нужно.

Использование Wireshark для изучения сетевых протоколов


В этом материале встречаются некоторые термины, которые можно отнести к чему-то вроде жаргона сетевых специалистов. Например — кадр (frame), TCP-порт (TCP port), DNS-ответ (DNS response), IP-адрес источника (source IP address), пакет client hello SSL-соединения (SSL client hello). Одной из причин их использования является тот факт, что Wireshark, определённо, не пытается оградить пользователя от тонкостей внутреннего устройства сетевых технологий. Новичка такое положение дел может, поначалу, заставить задуматься о том, что Wireshark — это программа не для него, а лишь для опытных сетевых специалистов.

У такой ориентированности Wireshark на низкоуровневые сетевые механизмы, однако, есть серьёзный плюс. Дело в том, что работая с этой программой, можно узнать что-то новое о сетевых протоколах. Например, я не особенно много знаю о внутренних механизмах протокола TLS/SSL. Однако, анализируя трафик в Wireshark, я обратила внимание на то, что первые два пакета SSL-соединения — это client hello и server hello. В результате протокол, который, если не вникать в детали его работы, кажется чем-то таинственным и недоступным для понимания, начинает обретать более понятную форму, превращается в нечто такое, что можно понять и проанализировать.

Итоги


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

Уважаемые читатели! Пользуетесь ли вы Wireshark?

RUVDS.com
1038,00
RUVDS – хостинг VDS/VPS серверов
Поделиться публикацией

Комментарии 12

    –1
    Продолжайте, пожалуйста, очень интересный инструмент
      +1
      Этих статей на Хабре куча.
      Как пример habr.com/post/204274. Да и вообще если по тэгу Wireshark пройтись можно найти много чего интересного.
        0

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

      +10

      Follow/TCP Stream ведь!
      Для отладки сетевых приложений и поиска "кто накосячил" 99% случаев.
      Смотреть tcp поток по пакетам — это удел мазохистов. Не, если проблема в инфраструктуре, то да, но первое таки follow.

        0
        В моей практике обычно «накосячил» выражается в обрыве соединения. Поэтому я обычно смотрю именно пакеты и ищу от кого первым пришел пакет RST или FIN.
          0
          Возможно — у всех практики разные.
          Но дело в том, что Follow по сути сначала делает Conversation filter, а потом показывает отдельное окошко с полезной нагрузкой. Зная приблизительно какая полезная нагрузка ожидается, можно частенько решить есть ли проблема, там ли она, где кажется, и прочее.
          После этого ничего не мешает закрыть это окошко и смотреть на пакеты. Но зачем добровольно отказываться от предложения посмотреть на полезную нагрузку перед тем, как искать флаги в пакетах (то бишь использовать Conversation Filter супротив Follow для TCP соединения) мне решительно непонятно.
            0
            Это работает только когда известно какая полезная нагрузка ожидалась…

            Но даже и в этом случае. Вот вы заметили что полезная нагрузка от сервера пришла правильная, но обрезанная. Кто в этом виноват — клиент или сервер? Кто первым оборвал соединение-то? Все равно же придется лезть смотреть пакеты…
              0
              Конечно придется. Закрываете окошко с полезной нагрузкой — получаете то же, что и при Conversation Filter. Дел на секунду.
              Но зато видно не только, кто первый закрыл, но и кто последний чего-то послал (тоже бывает полезно). Да и тупо меньше шансов промахнуться и фильтрануть не то соединение, если их там много всяких бегает.

              Я не говорю, что пакеты глядеть не надо — конечно надо. Кто закрыл, какие таймстемпы, есть ли жопа в сети. Просто конкретный случай — Follow не хуже, чем Conversation.
        0
        Эх, если бы он еще умел открыть .CAP файл гигов на 60 и не упасть при этом. Вот какого хрена он пытается его весь в память затянуть, а?
          0
          Кому во имя всего святого может понадобиться анализировать дамп трафика на 60 гигов?)
            +1

            30 минут на каком-нибудь высоконагруженном сокет-сервера и пожалуйста. Хотя ни для кого не должно быть секретом, что tcpdump поддерживает удобный механизм
            разбивки...

          0
          Это лучший сниффер всех времен. Работаю с ним много лет. Функционал действительно потрясает. Чего стоит хотя бы возможность сохранять аудио из voip-медиапотока.
          Однозначно один из лучших тулзов админа. При этом еще и бесплатный.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое