Журнал LinuxFormat - перейти на главную

LXF121:DrBrown3

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Wireshark

Wireshark Интересно, что на самом деле происходит в вашей сети? Wireshark поможет это выяснить.


Wireshark – одна из моих любимых утилит. Думаю, потому, что с ней можно делать открытия. Я еще помню то удивление, которое испытал, когда попробовал ее в первый раз (в те времена она называлась Ethereal). Наверное, так же чувствовал себя Антоний ван Левенгук, впервые заглянув в микроскоп и увидев то, чего не видел до него ни один человек. Пожалуй, я немного отвлекся, но Wireshark – это, несомненно, и удобное средство диагностики, и увлекательный инструмент для изучения того, как все работает.



Wireshark – это утилита, перехватывающая сетевой трафик с одного или нескольких сетевых интерфейсов. Можно задать набор правил, определяющих интересующие вас пакеты. Затем эти пакеты откладываются в сторонку (точнее сказать, в буфер) и всесторонне анализируются. Перехваченные пакеты можно также сохранить в файл и загрузить из него. Обычно Wireshark переводит сетевой интерфейс в так называемый «неразборчивый» режим (promiscuous mode) и принимает все пакеты, а не только адресованные вашему компьютеру. Для перевода в «неразборчивый» режим нужны привилегии суперпользователя, поэтому Wireshark обычно запускается от имени root.

Начнем с простого примера работы Wireshark: рассмотрим результат обращения к web-странице на сервере 192.168.1.67 из браузера на клиенте 192.168.1.69. В верхней части изображения (выделена зеленым на рисунке) показан весь обмен пакетами. Каждая строка – это один пакет. Пакеты с первого по третий – открытие TCP-соединения, четвертый – запрос HTTP GET, а шестой – ответ на него. Пакеты 7–10 показывают завершение соединения на обоих концах. В колонке Time [Время] показано время, прошедшее с захвата первого пакета в секундах. Оно пригодится, например, для анализа задержек из-за тайм-аутов DNS. В нашем случае на это понадобилось менее 3 мс.

Четвертый пакет на рисунке выделен для подробного анализа. В средней панели мы видим общую информацию о заголовках внутри него для каждого уровня стека протоколов. С помощью маленьких стрелок слева можно раскрыть любой уровень, показав его более подробно. Мы сделали это с заголовком уровня приложения – в данном случае это HTTP-пакет. Теперь мы видим, что это запрос HTTP GET, и видим поля заголовка HTTP-запроса.

В нижней части панели отображается содержимое пакета, байт за байтом, в шестнадцатеричном формате и в ASCII. Подсвеченная часть показывает поле заголовка HTTP, выделенное выше – в данном случае, поле Host:.

Фильтры

Фильтры – одна из самых мощных возможностей Wireshark. Фильтр – это один или несколько тестов содержимого пакета, позволяющих понять, интересен ли он вам. Фильтрация выполняется в две стадии. Фильтры захвата определяют пакеты, которые будут удержаны в буфере захвата, а фильтры отображения определяют, какие пакеты будут показываться. Язык фильтров богат, и фильтровать можно практически по любому пoлю любого из протоколов, что позволяет сконцентрироваться на трафике, который вам интересен.

Наблюдательные читатели могли заметить, какой фильтр использовался в последнем примере. Он состоит из простого правила not arp и используется, чтобы подавить ARP-болтовню с моего широкополосного маршрутизатора.

Фильтры могут оперировать с заданными протоколами, такими как IP, TCP, UDP, ARP и т. д. Они могут выполнять сравнение на равенство и неравенство и числовое сравнение значений полей. Для полей со строковыми значениями можно анализировать подстроки с помощью оператора contains и проверять их на соответствие регулярным выражениям оператором matches. Можно даже сравнить содержимое заданной части пакета с помощью синтаксиса [смещение:длина]. Отдельные условия можно объединить операторами and, not и or. Все это образует универсальный и мощный язык фильтров.

В Wireshark есть графическая утилита, помогающая создавать фильтры отображения. Чтобы запустить ее, нажмите на кнопку Expression [Выражение] на панели инструментов Filter [Фильтр] главного окна. На рисунке с его помощью определяется фильтр для отображения только тех пакетов, которые содержат код ответа HTTP 404 («Файл не найден»). Результирующее правило фильтрации: http.response.code == 404. Полей, по которым можно фильтровать, полным-полно; а как узнать их имена? Ну, при перемещении по пакету в главном окне Wireshark имя поля выбранного элемента отображается в строке состояния. Имена полей можно использовать в выражениях фильтров. Вглядевшись в строку состояния первого экранного снимка, вы увидите, что выбранному на панели выше полю соответствует http.host. Полный список имеется на сайте http://www.wireshark.org/docs/dfref.


В двух таблицах далее показано несколько примеров фильтров захвата и отображения, способных дать представление об их возможностях. Прежде чем покончить с фильтрами, скажу пару слов о последнем классе, о котором нужно знать: он позволяет задать цветовые правила для Wireshark. Редактор цветовых правил поможет создать новые правила (используя тот же синтаксис, что и у фильтров) и цвета для них, а также импортировать или экспортировать набор цветовых правил. Также можно применять пользовательские цветовые правила для подсветки пакетов на фоне другого трафика. На сайте http://www.wireshark.org есть набор готовых цветовых правил, с которых можно начать.

А в окне параметров захвата можно задать – не ждите призов за отгадку – параметры захвата. Здесь можно указать интерфейс, пакеты с которого будут захватываться, переключить его в «неразборчивый» режим, задать фильтр захвата и установить предельные значения для числа пакетов, объема данных или времени.

Делаем это с командной строки

Пакеты можно перехватывать и из командной строки с помощью Tshark. Например, опишем перехват ста пакетов с интерфейса eth0 в файл /tmp/shark.out, с фильтрацией ARP-трафика:

$ sudo tshark -i eth0 -c 100 -w /tmp/shark.out not arp

(Фильтры Tshark аналогичны фильтрам Wireshark.) Потом можно отобразить трафик, прочитав его командой

$ tshark -r /tmp/shark.out

На рисунке показан фрагмент этого вывода. Тот же файл можно загрузить в Wireshark, чтобы просмотреть его в графическом виде.

За кадром

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

Эта библиотека используется и другими утилитами перехвата сетевого трафика: например, Tcpdump, утилитой сканирования портов Nmap, системой обнаружения вторжений Snort и Tshark – собратом Wireshark, работающим с командной строки.

Где узнать больше

Официальное описание синтаксиса фильтров можно найти на man-странице Tcpdump. На сайте http://wiki.wireshark.com также имеется руководство пользователя Wireshark, HOWTO, примеры цветовых правил и правил фильтрации, а слишком уж подробное руководство по фильтрам есть на сайте http://www.wireshark.org/docs/man-pages/wireshark-filter.html

Фильтры захвата

Чтобы захватить... ... используйте фильтр
Только трафик, идущий от или к заданному IP host 192.168.1.44
Только трафик, идущий от или к заданной подсети net 192.168.1.0/24
Только DNS-трафик (порт 53) port 53
Все, кроме ARP и DNS port not 53 and not arp

Фильтры отображения

Чтобы увидеть... ... используйте фильтр
Только трафик между машинами в локальной подсети ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16
Только трафик от MAC-адресов устройств Dell eth.addr[0:3]==00:06:5B
Только HTTP-запросы с URI, заканчивающимися на foo http.request.uri matches “foo$”
Трафик, имеющий отношение к Windows smb || nbns || dcerpc || nbss || dns

LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика