Введение
Сетевой трафик перед передачей по сети часто разбивается на небольшие фрагменты, называемые пакетами. Когда клиент и сервер общаются, они обмениваются множеством таких пакетов. «Поток» (stream) представляет собой полную упорядоченную последовательность этих пакетов для одного соединения.
Различие между отдельными пакетами и потоком — это один из важнейших аспектов в анализе протоколов. Отдельные пакеты показывают, что произошло в конкретный момент времени. Потоки же показывают весь диалог целиком. Многие события прикладного уровня, такие как вход в систему, отправка форм и передача файлов, становятся гораздо понятнее, если восстановить весь диалог, а не рассматривать изолированные пакеты по отдельности.
В этой лабораторной работе вы научитесь использовать tshark (версию Wireshark для командной строки) для восстановления таких фрагментированных сетевых диалогов. Отслеживая полные TCP-потоки, вы сможете собрать отдельные пакеты воедино и просмотреть всё взаимодействие между клиентом и сервером в виде читаемого текста. Это важнейший навык для устранения неполадок в сети и анализа безопасности.
Идентификация TCP-потоков
На этом этапе вы узнаете, как идентифицировать различные TCP-потоки, присутствующие в файле захвата сетевого трафика.
Когда tshark считывает файл захвата, он автоматически группирует пакеты, принадлежащие одному и тому же соединению (одинаковые IP-адрес источника, порт источника, IP-адрес назначения и порт назначения), и присваивает им уникальный целочисленный индекс. Этот индекс известен как поле tcp.stream.
Вы можете рассматривать tcp.stream как метку диалога, созданную анализатором. Она не поступает из самой сети как поле протокола. Вместо этого tshark делает вывод, что определенные пакеты связаны друг с другом, поскольку они имеют общие конечные точки соединения и последовательность событий. Именно поэтому анализ потоков является таким полезным «взглядом аналитика» на данные.
Ваша среда уже подготовлена: в каталоге ~/project находится файл захвата трафика sample_traffic.pcap. Этот файл содержит базовый веб-трафик.
Чтобы увидеть все уникальные TCP-потоки в этом файле, вы можете попросить tshark извлечь поле tcp.stream из каждого пакета, отсортировать результаты и отобразить только уникальные значения.
Выполните следующую команду в терминале:
tshark -r sample_traffic.pcap -T fields -e tcp.stream | sort -n | uniq
Разберем эту команду:
-r sample_traffic.pcap: указываетtsharkпрочитать указанный файл захвата.-T fields: указывает, что мы хотим вывести конкретные поля, а не сводку пакетов по умолчанию.-e tcp.stream: указываетtsharkвывести индекс TCP-потока для каждого пакета.| sort -n | uniq: передает вывод стандартным утилитам Linux для числовой сортировки и удаления дубликатов.
Вы должны увидеть вывод, похожий на этот:
0
1
Этот вывод указывает на то, что в файле захвата записаны два отдельных TCP-диалога (поток 0 и поток 1).
Восстановление TCP-потока
Теперь, когда вы знаете индексные номера TCP-потоков, вы можете восстановить весь диалог целиком. Этот процесс идентичен функции «Follow TCP Stream» (Отследить TCP-поток) в графическом интерфейсе Wireshark.
Восстановление особенно ценно для текстовых протоколов, таких как HTTP, SMTP и многих устаревших прикладных протоколов, поскольку аналитик может прочитать запросы и ответы в том порядке, в котором их «видело» приложение. Даже если обмен данными охватывает несколько пакетов, восстановленный поток возвращает целостность повествования.
На этом этапе мы восстановим поток 0. Этот поток содержит HTTP-запрос GET, в котором клиент запрашивал у сервера веб-страницу.
Чтобы отследить поток в tshark, используется опция -z, которая применяется для различных задач статистики и анализа. Конкретный синтаксис для отслеживания потока: -z follow,tcp,ascii,<stream_index>.
Выполните следующую команду для восстановления потока 0:
tshark -r sample_traffic.pcap -z follow,tcp,ascii,0 -q
Вот что означают новые аргументы:
-z follow,tcp,ascii,0: дает командуtsharkотследить TCP-поток с индексом0и отобразить полезную нагрузку в форматеascii(читаемый текст).-q: означает «quiet» (тихий режим). Он подавляет вывод по умолчанию для каждого пакета, чтобы вы видели только данные восстановленного потока.
Вы увидите вывод, отображающий полный HTTP-диалог:
===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 0
Node 0: 127.0.0.1:58548
Node 1: 127.0.0.1:8080
GET / HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
Accept: */*
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Date: Thu, 05 Mar 2026 02:00:48 GMT
Content-type: text/html
Content-Length: 40
Last-Modified: Thu, 05 Mar 2026 02:00:44 GMT
Welcome to the LabEx Network Stream Lab
===================================================================
В этом выводе вы можете четко видеть запрос клиента (GET / HTTP/1.1...), за которым сразу следует ответ сервера (HTTP/1.0 200 OK... и HTML-контент). tshark успешно собрал отдельные пакеты обратно в связный текстовый блок.
Анализ диалога
При анализе сетевого трафика диалоги могут быть очень длинными. Вывод огромного потока прямо в терминал может затруднить чтение и анализ.
Сохранение восстановленного потока в файл — это небольшой шаг, но он отражает важную привычку в криминалистике: сохранять промежуточные артефакты анализа. Исследователи часто хранят заметки, извлеченные диалоги, декодированные полезные нагрузки и отфильтрованные доказательства в виде отдельных файлов, чтобы результаты можно было просмотреть, сравнить или передать кому-то другому, не повторяя одни и те же команды с нуля.
На этом этапе вы восстановите поток 1 и перенаправите вывод в текстовый файл. Это позволит вам использовать стандартные текстовые редакторы или инструменты командной строки для изучения диалога в удобном для вас темпе.
Поток 1 содержит HTTP-запрос POST, который обычно используется при отправке данных, например, формы входа в систему.
Выполните следующую команду, чтобы отследить поток 1 и сохранить вывод в файл с именем stream1_analysis.txt:
tshark -r sample_traffic.pcap -z follow,tcp,ascii,1 -q > stream1_analysis.txt
Оператор > берет вывод, который обычно отображается на экране, и записывает его в файл stream1_analysis.txt в вашем текущем каталоге (~/project).
Теперь используйте команду cat для просмотра содержимого созданного файла:
cat stream1_analysis.txt
Ваш вывод должен выглядеть примерно так:
===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 1
Node 0: 127.0.0.1:45138
Node 1: 127.0.0.1:8080
POST /login HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
user=labex&action=loginHTTP/1.0 501 Unsupported method ('POST')
Server: SimpleHTTP/0.6 Python/3.10.12
Date: Wed, 25 Oct 2026 10:00:05 GMT
Connection: close
Content-Type: text/html;charset=utf-8
Content-Length: 480
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
...
===================================================================
Анализируя этот файл, вы можете увидеть точные данные, которые клиент отправил в теле запроса POST (user=labex&action=login). Вы также можете увидеть ответ сервера, который в данном случае является ошибкой 501 Unsupported method, указывающей на то, что простой веб-сервер Python, использованный для генерации этого трафика, не поддерживает запросы POST.
Сохранение потоков в файлы — это высокоэффективная техника, когда вам нужно извлечь файлы, учетные данные или подробные журналы из сетевых захватов.
Резюме
Поздравляем! Вы успешно завершили лабораторную работу «Отслеживание сетевых потоков».
В этой лабораторной работе вы научились:
- Идентифицировать уникальные TCP-потоки в файле захвата пакетов с помощью поля
tcp.stream. - Восстанавливать и просматривать полный диалог конкретного TCP-потока с помощью функции
followвtshark. - Перенаправлять данные восстановленного потока в текстовые файлы для удобства чтения и более глубокого анализа.
Эти методы являются фундаментальными для сетевых администраторов и специалистов по безопасности при расследовании сетевых проблем, анализе поведения вредоносного ПО или проверке взаимодействия приложений.

