- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF121:DrBrown3
Материал из Linuxformat.
Содержание |
Wireshark
- 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