Пожалуй начну серию статей по Wireshark с настройки фильтров. Их у Wireshark целых 2 типа: capture и display — для захвата уже конкретных сетевых пакетов и для отображения определенных пакетов из захваченной разнородной массы пакетов соответственно.

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

Плюсы: Экономия места на диске, если приходится сохранять большой сетевой дамп.

Минусы: Нагружает процессор. Используется только для живого сниффинга трафика.

 

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

Плюсы: Можно фильтровать онлайн трафик и оффлайн файлы.

Минусы: При онлайн захвате на компьютере сохраняется большое количество ненужных пакетов.

Итак приступим к настройке фильтров захвата.

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

Добавим новый фильтр. В качестве фильтрующего выражения используется фильтры Беркли. Когда вы вводите выражение фильтра следите за тем, чтобы строка стала зеленой. Это говорит о том, что выражение правильное. Например, мы хотим фильтровать пакеты с адресом 2.252.255.95, отправленные на порт 53. Фильтр будет выглядеть так : host 2.252.255.95 and dst port 53. Ниже я приведу краткое объяснение выражениям Беркли и опишу как их использовать.

 

Итак, фильтр мы создали. Теперь применим его.

Выбираем Capture → Options

Откроется окно, где нужно выбрать интерфейс и сам фильтр. Кликнете на зеленый маркер для выбора конкретного фильтра

Если фильтр написан правильно, то строка фильтра “позеленеет”.

В любом случае рекомендуется проверить правильность фильтра кнопкой Compile BPFs.

Если есть ошибка, то программа сообщит об этом.

Нажимаем на кнопку Start и “ловим” трафик. Если все сделано правильно, то в левом верхнем углу появится выбранный фильтр.

 

Теперь попробуем разобраться, что из себя представляют фильтры Беркли и как их использовать.

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

host — IP адрес получателя или отправителя

src — отправитель

dst — получатель

net — подсеть

port — порт

portrange — диапазон портов

Операторы объединения:

and  или && — конъюнкция (должны соблюдаться все условия)

or  или || — дизъюнкция (должно выполняться хотя бы условие)

not  или ! — негация

Попробуем составить выражения, используя данные атрибуты.

host 192.168.1.1 — здесь фильтруются пакеты с адресом получателя или отправителя 192.168.1.1.

src mail.ru — здесь указывается, что мы хотим видеть пакеты, отправителем которых является mail.ru.

port 53 — TCP/UDP пакеты с портом 53.

src port 53 — TCP/UDP пакеты, отправитель которых использует порт 53.

src mail.ru and dst 192.168.1.1 — фильтруются пакеты, отправленные mail.ru на хост с адресом 192.168.1.1. Это более сложная конструкция, состоящая из 2-х простых выражений и объединенная инструкцией and (&&). Она означает, что должны соблюдаться оба условия.

tcp and port 80 — фильтруется только TCP трафик, отправленный или направленный на порт 80. proto (protocol) означает протокол.

(tcp or udp) and dst port 53 — TCP или UDP пакеты, отправленные на порт 53. Здесь использовалась конструкция or (||), которая означает, что должно соблюдаться хотя бы одно условие. Выражение tcp or udp я специально заключил в скобки, чтобы условие dst port 53 относилось к пакетам UDP и TCP.

tcp or udp dst port 53 — в данном выражении мы фильтруем любые TCP пакеты отправленные или полученные на любом порту либо UDP пакеты, отправленные только на порт 53.

 

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

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

 

1-й способ

Теперь представим, что мы хотим фильтровать трафик по следующим параметрам:

адрес отправителя — 165.72.12.88

адрес получателя — 2.252.255.95

протокол  — DNS

Для этого кликаем на кнопку Expression и перед нами откроется окно с фильтрами. Справа от фильтра даются очень краткие описания.

Список довольно большой и пригодятся хотя бы базовые знания английского. Для начала ищем IPv4 и в раскрывающемся списке выбираем нужный фильтр. Затем выбираем соответствующую инструкцию и вводим значение. Нажимаем на OK и выражение добавляется в строку фильтра.

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

Теперь нам нужно, чтобы в выражении присутствовал сам протокол DNS без каких-либо параметров. Для этого просто выбираем протокол в списке и в качестве инструкции используем “is present”. Нажимаем на OK.

Наш фильтр готов. Осталось нажать Enter или кнопку Apply в строке фильтра.

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

 

2-й способ

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

Выбираем любой пакет протокола DNS и раскрываем параметры протоколов. Для начала раскроем уровень IP и выделим адрес отправителя.

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

При желании можно ввести вручную данное выражение либо открыть контекстное меню и выбрать Apply as filter → Selected

Выражение сразу отобразится в строке фильтра. Значение можно поменять при необходимости.

То же самое проделываем и для адреса получателя, однако для объединения с первым выражением выбираем Apply as Filter → …and Selected. Программа автоматически добавит конъюнкцию.

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

Хочу отметить, что опция Apply as Filter сразу применяет выбранный фильтр, то есть не нужно потом нажимать на Enter. Если вы хотите сначала построить фильтр, возможно отредактировать, то используйте опцию Prepare as Filter. После нее необходимо нажать на Enter.

 

Сохранение фильтров

Сразу же возникает вопрос можно ли сохранить фильтр и использовать его в дальнейшем.

Конечно же, можно. Существуют 2 способа.

 

1-й способ

У нас уже составлен фильтр, сохраним его. Для этого нажимаем на голубой маркер в строке фильтра и выбираем Save filter.

Перед нами открывается уже знакомое окно. Меняем название и сохраняем. Теперь для вызова фильтра снова кликаем на голубой маркер и из списка выбираем нужный нам фильтр.  Чтобы снова открыть менеджер фильтров отображения достаточно кликнуть на известный нам маркер и выбрать Manage Display Filter либо в верхнем меню программы выбрать опцию Analyze → Display filters.

 

2-й способ

Снова кликаем на маркер и выбираем опцию Manage filter expressions. Затем добавляем новое выражение, указываем название или просто букву (лучше использовать очень короткие названия) и записываем выражение фильтра. Сохраняем и справа от строки фильтра появляется наше буквенное обозначение фильтра. Если нажать на него, то программа сразу применит выбранный фильтр.

 

Я описал несколько способов работы с фильтрами. Надеюсь данная информация будет для вас полезной и работа с Wireshark станет более приятной.