Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Использование Wireshark для исследования сетей

Оригинал: Wireshark for Network analysis
Автор: Riccardo Capecchi
Дата публикации: 22 сентября 2010 г.
Перевод: А.Панин
Дата публикации перевода: 27 ноября 2012 г.

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

Wireshark

Программа Wireshark (ранее программа была известна под названием Ethereal) стала стандартом де-факто при исследовании сетей и анализе протоколов среди приложений с открытым исходным кодом. Она предоставляет возможность проводить низкоуровневую фильтрацию пакетов и их анализ. Файлы с захваченными данными из сети (trace files) могут быть открыты в Wireshark и рассмотрены вплоть до каждого пакета.

Некоторые примеры использования программы Wireshark:
  • Администраторы сетей используют ее для выявления причин неполадок в сетях.
  • Специалисты по безопасности сетей используют ее для поиска проблем с безопасностью.
  • Разработчики используют ее для отладки реализаций протоколов.
  • Пользователи используют ее для изучения принципов работы сетевых протоколов.

Помимо этих примеров, Wireshark может помочь и в других ситуациях.

Установочные пакеты Wireshark доступны в официальном репозитории Ubuntu 10.04 (пакеты доступны также для более поздних версий Ubuntu и других популярных дистрибутивов - прим.пер.), поэтому для установки потребуется всего лишь использовать команду: sudo aptitude install wireshark.

Как только установка завершится, запустите программу из терминала при помощи команды sudo wireshark; да, в этом случае программа будет выполняться с правами пользователя root, что является не самым безопасным решением, но альтернативный вариант запуска без прав суперпользователя требует множества действий по конфигурации системы, с ним вы можете познакомиться по ссылке (работает только в Linux).

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

Под заголовком "Interface List" вы должны увидеть список всех сетевых интерфейсов вашей системы, для начала захвата пакетов достаточно просто выбрать интересующий вас интерфейс при помощи клика, после чего вы увидите пакеты, проходящие через интерфейс в новом окне.
Пакеты, проходящие через интерфейс

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

Большой объем информации уводит из поля зрения нужную информацию.

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

Так что же использовать: фильтры захвата или фильтры отображения?

Задачи этих фильтров отличаются.

Фильтр захвата используется в первую очередь для сокращения объема захваченных данных с целью предотвращения чрезмерного увеличения в объеме журнала данных.

Фильтр отображения является более мощным (и сложным); он позволяет вам искать именно те данные, которые вам необходимы.

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

Синтаксис фильтров захвата аналогичен синтаксису фильтров программ на основе библиотек libpcap (Linux) или winpcap (Windows), таких, как известная программа TCPdump. Фильтр захвата должен быть задан до начала захвата пакетов при помощи Wireshark, в этом состоит отличие от фильтров отображения, которые можно редактировать в любое время в течение процесса захвата.

Следующие шаги позволяют настроить фильтр захвата:

- В меню окна выберите пункт "Capture -> options".
Пункт Capture options

-Заполните текстовое поле "Capture filter" или нажмите на кнопку "Capture filter" для указания имени вашего фильтра с целью его повторного использования в последующих захватах данных.

-Нажмите кнопку "Start" для начала захвата данных.

Синтаксис:

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

Для задания всех фильтров действителен следующий базовый синтаксис:
Протокол Направление Узел(узлы) Значение Логические_операции Другое_выражение

Примеры:

Захват трафика только с IP-адреса 172.18.5.4:
host 172.18.5.4
Захват трафика, идущего по двум направлениям для диапазона IP-адресов:
net 192.168.0.0/24
или
net 192.168.0.0 mask 255.255.255.0
Захват трафика, идущего по направлению от узлов из диапазона IP-адресов:
src net 192.168.0.0/24
или
src net 192.168.0.0 mask 255.255.255.0
Захват трафика, идущего по направлению к узлам из диапазона IP-адресов:
dst net 192.168.0.0/24
или
dst net 192.168.0.0 mask 255.255.255.0
Захват только трафика от DNS (порт 53):
port 53
Захват трафика, не относящегося к протоколам HTTP и SMTP на вашем сервере (выражения эквивалентны):
host www.example.com and not (port 80 or port 25)
host www.example.com and not port 80 and not port 25
Захват трафика, не относящегося к протоколам ARP и DNS:
port not 53 and not arp
Захват трафика для диапазона портов:
(tcp[0:2] > 1500 and tcp[0:2] < 1550) or (tcp[2:2] > 1500 and tcp[2:2] < 1550)
Захватывать пакеты от узла с IP-адресом 10.4.1.12 или из сети с адресом 10.6.0.0/16, после этого объединять результат со списком пакетов TCP, целевые порты которых находятся в диапазоне от 200 до 10000 и целевые адреса принадлежат сети 10.0.0.0/8.
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8

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

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

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

Примеры:

Показывать только SMTP (порт 25) и ICMP-трафик:
tcp.port eq 25 or icmp
Показывать только трафик из локальной сети (192.168.x.x) между рабочими станциями и серверами без интернет-трафика:
ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16
Показывать случаи заполнения буфера TCP - в этом случае узел инструктирует удаленный узел о необходимости остановки передачи данных:
tcp.window_size == 0 && tcp.flags.reset != 1
Показывать только HTTP-запросы, в которых символы в конце строки запроса совпадают со строкой "gl=se":
http.request.uri matches "gl=se$"
Примечание: Символ $ является пунктуационным символом PCRE, который обозначает окончание строки, а в данном случае окончание поля http.request.uri.
Фильтрация по протоколу (т.е. SIP) и фильтрация нежелательных IP-адресов:
ip.src != xxx.xxx.xxx.xxx && ip.dst != xxx.xxx.xxx.xxx && sip

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

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

В следующей статье будет рассмотрен вопрос об использовании фильтров в программе Wireshark.