Wireshark

Анализатор Wireshark: захват пакетов и фильтры. Обзор прикладного уровня

На этом занятии мы углубим работу с Wireshark: разберём различие фильтров захвата и отображения, синтаксис по полям (ip.src, tcp.port, http, dns). Затем - прикладной уровень стека TCP/IP: протоколы HTTP, DNS, SMTP, роль приложений и транспортные сервисы (TCP и UDP), типичные порты. В конце - анализ пакета «снизу вверх», поиск по захвату и экспорт объектов, интерактивы, тест и пошаговая практика в Wireshark.

Коммутация пакетов

Сети с коммутацией пакетов

Компьютерные сети, с которыми мы работаем (в том числе интернет), относятся к сетям с коммутацией пакетов. Данные для передачи делятся на небольшие части - пакеты; каждый пакет передаётся по сети независимо от других и может идти своим маршрутом. В Wireshark мы видим именно эти пакеты: в верхней части окна - список пакетов, в средней - дерево протоколов выбранного пакета, в нижней - данные в шестнадцатеричном виде.

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

Фильтры в Wireshark

Фильтр захвата и фильтр отображения

Фильтр захвата (capture filter) задаётся до начала захвата и определяет, какие пакеты вообще попадут в буфер Wireshark. Синтаксис - язык BPF (Berkeley Packet Filter): например tcp port 80 - только TCP-трафик с портом 80 (HTTP). Так мы уменьшаем объём сохраняемых данных и не сохраняем лишний трафик.

Фильтр отображения (display filter) применяется к уже захваченным пакетам: он не удаляет пакеты из файла, а лишь скрывает часть из списка. Синтаксис свой - например tcp.port == 80, http, dns, ip.addr == 192.168.1.1. Различие важно: capture filter - «что записывать», display filter - «что показывать» из записанного.

Синтаксис фильтров

Фильтры по полям

В display filter можно указывать поля протоколов: ip.src - IP-адрес отправителя, ip.dst - получателя; tcp.port == 80 - порт 80 (в любой стороне); tcp.port == 443 - HTTPS. По прикладным протоколам: http - показывать только пакеты, в которых Wireshark распознал HTTP; dns - только DNS. Комбинации: ip.addr == 192.168.1.1 (адрес в src или dst), http.request - только HTTP-запросы.

Для capture filter синтаксис другой: host 192.168.1.1, port 80, tcp port 80. Wireshark при вводе display filter подсказывает доступные поля и подсвечивает ошибки - пользуйтесь строкой фильтра над списком пакетов.

Мария
Я уже запускал Wireshark - там куча пакетов. Как отфильтровать только веб?
Ответ

Только веб-трафик

Чтобы видеть только веб-трафик по HTTP, введите в строку display filter (над списком пакетов): http. Для HTTPS по порту: tcp.port == 443 (содержимое будет зашифровано, но пакеты видны). Если нужно записывать только HTTP уже при захвате - в настройках захвата укажите capture filter: tcp port 80.

Прикладной уровень

Прикладной уровень в стеке TCP/IP

На прикладном уровне работают сетевые приложения и прикладные протоколы: HTTP (веб), DNS (разрешение имён в IP), SMTP (почта), FTP, и многие другие. Каждый протокол задаёт формат сообщений и правила обмена - например HTTP: «запрос GET с URL» и «ответ с кодом 200 и телом страницы».

Приложения не вникают в то, как пакеты передаются по кабелю или по Wi‑Fi - они опираются на транспортный уровень. Прикладной уровень отвечает за семантику: что означают данные (запрос страницы, разрешение имени, письмо), а не за доставку байтов по сети.

Роль прикладного уровня

Семантика и изоляция

Роль прикладного уровня - определять смысл данных (запрос страницы, разрешение доменного имени в адрес, отправка письма) и изолировать приложения от деталей сети. Разработчик пишет код, который отправляет HTTP-запрос или DNS-запрос; ему не нужно программировать маршрутизацию или передачу по Wi‑Fi - за это отвечают нижние уровни.

Такая изоляция позволяет менять канальные технологии (Ethernet, Wi‑Fi, мобильная сеть) без изменения прикладных протоколов: браузер и веб-сервер по-прежнему общаются по HTTP поверх TCP и IP.

Транспортные сервисы

TCP и UDP для приложений

Прикладные протоколы используют один из двух основных протоколов транспортного уровня. TCP (Transmission Control Protocol) обеспечивает надёжную передачу потока байтов с установкой соединения: все данные дойдут в правильном порядке, повторная передача при потере. Подходит для веб-страниц, загрузки файлов, почты.

UDP (User Datagram Protocol) передаёт дейтаграммы - короткие сообщения без установки соединения, без гарантий доставки и порядка. Используется там, где важна скорость и допустимы потери (стриминг, DNS-запросы, голосовая связь). В Wireshark по полю «протокол» видно, какой транспортный протокол несёт прикладные данные.

Порты

Типичные порты приложений

Порт - это номер, по которому ОС доставляет данные нужному процессу. Типичные порты: 80 - HTTP (веб), 443 - HTTPS (веб по TLS), 53 - DNS (запросы имён), 25 - SMTP (отправка почты), 22 - SSH, 21 - FTP. В Wireshark в колонках можно видеть порты источника и назначения; фильтр tcp.port == 80 покажет весь трафик, связанный с портом 80.

По порту часто можно понять прикладной протокол: если в пакете TCP порт назначения 80 - скорее всего это HTTP-запрос к веб-серверу; порт 53 - DNS. Один хост может одновременно обслуживать много соединений на одном порту (например много клиентов к веб-серверу на 80).

Анализ пакета

Разбор «снизу вверх»

При разборе одного пакета в Wireshark удобно идти снизу вверх: сначала кадр уровня сетевых интерфейсов (Ethernet или Wi‑Fi) - заголовок с MAC-адресами и типом; затем заголовок IP - адреса отправителя и получателя; затем заголовок TCP или UDP - порты и служебные поля; в конце - payload прикладного уровня (например текст HTTP или данные DNS).

В дереве пакета (средняя панель) каждый уровень раскрывается отдельно; выделение строки подсвечивает соответствующие байты в шестнадцатеричном дампе. Так наглядно видна инкапсуляция: данные приложения упакованы в TCP, TCP - в IP, IP - в кадр канального уровня.

Поиск и экспорт

Поиск по захвату и экспорт объектов

Поиск по захвату: в меню Edit → Find Packet можно искать пакет по строке в данных (например «GET » или «HTTP/1.1»), по hex или по фильтру. Удобно, когда пакетов много и нужно быстро найти нужный диалог.

Экспорт объектов: для HTTP в меню File → Export Objects → HTTP можно извлечь перехваченные объекты (HTML-страницы, изображения, скрипты), сохранённые в захвате. Так можно посмотреть содержимое страницы «как получил браузер» и проверить ответ сервера.

Пример разбора

HTTP-ответ с HTML в Wireshark

Типичный пример: вы открыли в браузере страницу по HTTP; Wireshark захватил трафик. Найдите пакет с ответом сервера (фильтр http.response или по коду 200 в данных). Откройте пакет - в дереве будет цепочка: Ethernet (тип 0x0800 - IPv4), Internet Protocol (Source, Destination), Transmission Control Protocol (порты, например 80 - сервер, ephemeral - клиент), Hypertext Transfer Protocol - здесь заголовки ответа (HTTP/1.1 200 OK, Content-Type, Content-Length) и тело (HTML).

По полям пакета видно, что это прикладной протокол: в данных есть текст «HTTP», «GET» или «200 OK» - семантика прикладного уровня. Нижележащие уровни только доставляют байты.

Дмитрий
Follow TCP Stream - это когда показывают весь диалог в одном окне?
Follow Stream

Follow → TCP Stream (и HTTP Stream)

Да. По клику правой кнопкой по пакету → Follow → TCP Stream Wireshark собирает все пакеты одного TCP-соединения и показывает данные потока в одном окне - запросы и ответы подряд. Для HTTP там будет виден текст запроса (GET, заголовки) и ответа (код, заголовки, тело). Аналогично Follow → HTTP Stream - только HTTP-часть диалога.

Это удобно для разбора одного сеанса с сервером без переключения между десятками пакетов.

Резюме теории

Что мы узнали

Wireshark: фильтр захвата (BPF) - что записывать; фильтр отображения - что показывать (http, dns, ip.src, tcp.port и др.). Прикладной уровень: приложения и протоколы (HTTP, DNS, SMTP); семантика данных и изоляция от нижних уровней; транспорт - TCP (надёжный поток) и UDP (дейтаграммы); типичные порты 80, 443, 53, 25. Анализ пакета снизу вверх (Ethernet → IP → TCP/UDP → приложение); поиск по захвату и экспорт HTTP-объектов; Follow TCP/HTTP Stream для просмотра диалога. Дальше - задания, тест и практика.

Задание 1

Фильтр захвата и фильтр отображения

Сопоставьте утверждение с типом фильтра.

Задаётся до начала захвата, определяет, какие пакеты записываются
Применяется к уже захваченным пакетам, скрывает часть из списка
Синтаксис: tcp.port == 80, http, dns
Задание 2

Порт и прикладной протокол

Сопоставьте порт с типичным прикладным протоколом.

Порт 80
Порт 443
Порт 53
Порт 25
Задание 3

Порядок уровней в пакете (снизу вверх)

Расставьте уровни в порядке от нижнего к верхнему (как они идут в пакете при разборе в Wireshark: первый - самый внешний, последний - прикладные данные).

1 (нижний, кадр):
2:
3:
4 (верхний, данные приложения):
Задание 4

Транспорт и приложение

1. Какой транспортный протокол использует HTTP?

2. Какой транспортный протокол обычно использует DNS (запрос имени)?

3. Display filter для показа только HTTP-пакетов:

Финальный допуск

Краткий тест (10 вопросов)

Для доступа к практике нужно набрать не менее 80% (минимум 8 из 10 правильных ответов).

1. Фильтр захвата (capture filter) задаётся:

2. Синтаксис tcp.port == 80 относится к:

3. Порт 53 по умолчанию использует протокол:

4. TCP обеспечивает:

5. Прикладной уровень в модели TCP/IP отвечает за:

6. Анализ пакета в Wireshark «снизу вверх» - это:

7. Follow → TCP Stream в Wireshark показывает:

8. Порт 443 обычно используется для:

9. Экспорт объектов HTTP в Wireshark (File → Export Objects → HTTP) позволяет:

10. UDP используется для:

Практика

Практика: Wireshark - захват, фильтры, HTTP и DNS

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

Практика - Шаг 1

Запустите Wireshark

1 Откройте Wireshark. Выберите активный сетевой интерфейс (тот, через который вы выходите в интернет - обычно с зелёной полоской или с растущим счётчиком пакетов). Дважды щёлкните по нему или нажмите «Start capturing».
Практика - Шаг 2

Настройте фильтр захвата (опционально)

2 Перед следующим захватом можно задать capture filter: Capture → Options, в поле «Capture Filter» введите tcp port 80 - тогда будут записываться только пакеты TCP с портом 80 (HTTP). Для этого шага можно остановить текущий захват (красный квадрат), снова открыть Capture → Options, задать фильтр и запустить захват заново. Если не хотите ограничивать трафик - пропустите этот шаг и продолжайте с текущим захватом.
Практика - Шаг 3

Сгенерируйте HTTP-трафик

3 В браузере откройте сайт по HTTP (например http://example.com или любой другой сайт, доступный по HTTP). Подождите загрузки страницы. Вернитесь в Wireshark и остановите захват (кнопка «Stop» - красный квадрат).
Практика - Шаг 4

Примените display filter «http»

4 В строке фильтра отображения (над списком пакетов) введите http и нажмите Enter или кнопку применения. Убедитесь, что в списке остались только пакеты, в которых Wireshark распознал протокол HTTP.
Практика - Шаг 5

Найдите запрос GET

5 Примените фильтр http.request - отобразятся только HTTP-запросы. Выберите один пакет с запросом GET. В средней панели раскройте дерево пакета и найдите блок «Hypertext Transfer Protocol» - там будет метод (GET), URI, версия и заголовки.
Практика - Шаг 6

Захват с DNS

6 Запустите новый захват (без capture filter или с port 53 or tcp port 80). В браузере откройте любой новый сайт по имени (например https://www.wikipedia.org). Остановите захват через 10–15 секунд.
Практика - Шаг 7

Фильтр dns

7 Введите в display filter dns. Найдите пакет с DNS-запросом (тип Query). Откройте дерево пакета → Domain Name System (query) и укажите запрошенное имя (например www.wikipedia.org).
Практика - Шаг 8

Поля одного пакета

8 По одному выбранному пакету (HTTP или DNS) запишите в тетрадь: уровень Ethernet (тип, если видно); IP - Source и Destination; TCP или UDP - порты источника и назначения. Так вы закрепите соответствие полей уровням стека.
Практика - Шаг 9

Фильтр tcp.port == 443

9 Очистите фильтр отображения или откройте сохранённый захват. Введите tcp.port == 443. Оцените долю пакетов с портом 443 (HTTPS) в сессии - современный трафик часто идёт по 443.
Практика - Шаг 10

HTTP 200 OK

10 В захвате с HTTP примените фильтр http.response. Найдите пакет с ответом 200 OK. В дереве пакета в блоке HTTP найдите заголовки (Content-Type, Content-Length) и при наличии - начало тела ответа (HTML).
Практика - Шаг 11

Follow → TCP Stream

11 Выберите любой пакет HTTP из диалога с веб-сервером. Щёлкните правой кнопкой → Follow → TCP Stream. В открывшемся окне опишите: что видно в запросе (GET, URL, заголовки) и в ответе (код, заголовки, фрагмент тела). Закройте окно потока.
Практика - Шаг 12

Экспорт HTTP-объекта

12 В меню File выберите Export Objects → HTTP. Если в захвате есть HTTP-объекты, появится список. Выберите один (например HTML-страницу), нажмите «Save» и сохраните файл. Откройте его в браузере или текстовом редакторе и убедитесь, что это содержимое, полученное по HTTP.

Если список пуст (например захват был только HTTPS или без веб-страниц) - пропустите сохранение и перейдите к следующему шагу.

Практика - Шаг 13

Сохранение захвата

13 Сохраните захват в файл: File → Save As, выберите формат .pcap или .pcapng. В следующих занятиях вы сможете открыть этот файл и снова применить фильтры без повторного захвата.
Практика - Контрольные вопросы

Самопроверка

Ответьте себе (без отправки):

  • Какой display filter вы использовали для HTTP и для DNS?
  • В одном пакете: какие поля относятся к Ethernet, IP, TCP и HTTP?
  • Что показывает Follow → TCP Stream для одного соединения?
  • Как по полям пакета понять, что это прикладной протокол (HTTP)?

Практика завершена. На следующем занятии - прикладной уровень и протокол HTTP подробнее, разбор в Wireshark.