Wireshark. Сниффинг и анализ сетевого трафика
Sam Sepiol![](/file/f55bddc95b0b4177c39c7.png)
Wireshark.
Википедия даёт следующее определение: "Wireshark — программа-анализатор трафика для компьютерных сетей Ethernet и некоторых других. Имеет графический пользовательский интерфейс. Изначально проект назывался Ethereal, но, из-за проблем с торговой маркой, в июне 2006 года проект был переименован в Wireshark"
Скачать данное ПО можно по ссылке - https://www.wireshark.org/#download
Для чего?
Wireshark используется многими ИТ-специалистами, начиная от сетевых инженеров для которых он является одним из основных инструментов, заканчивая сетевыми программистами и исследователями безопасности.
Основные задачи, которые позволяет решать Wireshark:
- Анализ сетевых дампов
- Сниффинг трафика на определённом интерфейсе в реальном времени
По сути данный инструмент позволяет отслеживать сетевую активность и анализировать пакеты. Наверняка, вы уже сталкивались с этим инструментом. Аналогов данному ПО практически нет, да и сложно конкурировать с уже сложившимся продуктом.
Если вы никогда не слышали про Wireshark и слабо представляете, что это такое, то вы можете пока что просто принять следующее утверждение: "Wireshark может получать все пакеты, которые приходят на вашу сетевую карту".
Интерфейс.
Надеюсь, к этому моменту вы скачали и установили Wireshark. В Kali Linux данная программа установлена по умолчанию.
При запуске Wireshark будет открыто главное меню, в котором можно выбрать сетевой интерфейс на котором нужно будет сниффать трафик.
![](/file/4d50e2ab024a8cb16f12d.png)
Справа от интерфейса можно заметить небольшой график, которой отображает состоянии сети (загруженность сети). Если там прямая линия, это значит, что скорей всего на этом интерфейсе вообще нет никаких пакетов.
Для того, чтобы начать записывать трафик на выбранном интерфейсе, нужно нажать на значок плавника в левом верхнем углу.
![](/file/be61fa04d67286e23f348.png)
Начнётся запись всего трафика. Каждый пакет отображается в логе небольшой строкой и имеет следующие базовые характеристики для отображения:
- N0. - номер пакета с момента начала логирования
- Time - время когда пакет был перехвачен, относительно начала
- Source - адрес источника отправки пакета
- Destination - адрес назначения отправки пакета
- Protocol - протокол передачи пакета
- Length - размер пакета (в байтах)
- Info - дополнительная информация (зависит от протокола)
Таким образом мы накапливаем трафик который есть в данной сети. Также можно и записывать трафик, через другие утилиты, которые могут сохранять лог в формате, принимаемом Wireshark'ом. Например вы можете логировать трафик на роутере, через который проходит множество клиентов и после анализировать его в Wireshark'e в таком же формате.
Теперь вы можете наблюдать за тем, какой трафик уходит от вас и какой приходит к вам. Для того, чтобы делать это быстрее и удобнее Wireshark поддерживает фильтры.
Фильтры.
Фильтры помогают отобразить именно те пакеты, которые вам необходимы. Т.к. логируется весь трафик, то поиск необходимых пакетов в общем потоке может быть довольно сложен. Для упрощения используются фильтры. Например, вы можете поставить фильтр на адрес источника или назначения пакета, на протокол или на размер пакета и ещё на многое другое.
Самые частые и популярные фильтры:
Фильтр: ip.addr == <ip>
![](/file/74ef2154eaa6546e7ca31.png)
Данный фильтр используется для того, чтобы отобразить все пакеты относящиеся к определённому ip-адресу. То есть всё что приходит на ip и всё что с этого ip отправляется. С помощью этого фильтра вы можете получить весь трафик для конкретной машины. Есть ещё множество фильтров для ip все они отображаются в контекстном меню при вводе в поле фильтра строки "ip".
![](/file/9892b7d6160e240039835.png)
По сути это все поля протокола IP и на любое из них вы можете поставить фильтр (по сути условие).
Фильтр: tcp или udp
![](/file/210aefae0e21fe855a82e.png)
Данные фильтры помогут отобразить только трафик для указанного протокола. Есть ещё ряд фильтров для протокола. Обычно эти фильтры комбинируют с фильтром ip.addr, чтобы получить весь трафик по определённому протоколу для одного хоста.
Фильтр: tcp.port == <num>
![](/file/6d0eb1c12045c55b8dea9.png)
Такой фильтр поможет получить TCP-трафик, которой идёт на 80 порт и с него. Это удобно, когда вы хотите узнать что именно приходит и уходит с определённого порта. Также можно модифицировать данный фильтр и точно указывать порт назначения и источника: "tcp.srcport" - для указания порта источника и "tcp.dstport" - для указания порта назначения.
Фильтр: tcp.len > n
![](/file/d1eb6417329ea7af14020.png)
С помощью данного фильтра можно получить пакеты с размером tcp-payload больше, чем определённое число. Обычно ставят больше нуля, для того, чтобы просто отсечь пакеты установки TCP-соединения.
В целом вы можете просто подумать, как вам надо отфильтровать трафик (например по протоколу и каким-то поля протокола) и начать писать наименование протокола и увидите какие есть возможные фильтры.
Комбинирование фильтров.
Как вы могли заметить, фильтры по сути представляют собой логическое выражение, а значит их можно объединять.
Поддерживаются базовые логические операторы:
- > - больше
- < - меньше
- == - равно
- ! - отрицание (НЕ)
- != не равно
- && - логическое "И" (можно также использовать "and")
- || - логическое "ИЛИ" (можно также использовать "or")
С помощью этих операторов, вы можете комбинировать несколько простых условий и таким образом получать сложный фильтр, который позволит вам отобразить только те пакеты которые удовлетворяют данному логическому выражения.
Вот, например, фильтр на длину TCP-пакета для определённого хоста.
![](/file/30da65e5235f6a35061d0.png)
С помощью данного инструмента вы можете создавать действительно сложные фильтры, которые будут очень эффективны именно для ваших задач.
Сохранения трафика.
Сохранить трафик можно разными путями, всё зависит от того, что именно вам надо сохранить. Для того, чтобы сохранить, надо выключить логирование. Это действие производится путём нажатия на красную кнопку в левом верхнем меню. После остановки записи, можно производит сохранение.
Чтобы сохранить весь записанный трафик достаточно использовать опцию "File->Save". После вам предложит выбрать место сохранение и имя файла и всё. Вы сохраните весь трафик, который был записан за определённый период.
Часто не нужно сохранять весь трафик, а нужно сохранить только то, что подпадает под фильтр. Для этого используется опция "File->Export Specified Packets" которая позволит сохранить только "Displayed" пакеты, то есть отображённые.
![](/file/713c0043c323c7a9d7500.png)
А также можно сохранить только выделенные пакеты (это те, которые подсвечены по другому. По дефолту это всегда один пакет, на котором сейчас стоит указател).
Сохранённый дамп, также можно открыть в Wireshark и исследовать его.
Вместо заключения.
Надеюсь, что вам было полезно это небольшое введение в Wireshark и вы по достоинству оцените мощь данного инструмента