Снять дамп трафика windows

Обновлено: 05.07.2024

В системе ECSS-10 возможно снять log-файл TCP dump следующими способами:

  • включить запись TCP dump в CLI на SIP-адаптере;
  • включить запись TCP dump в Shell Linux;
  • использовать логи SIP-адаптера - siptrace.bin.
  1. TCP dump с сетевого интерфейса (pcap, используется внешний вызов tcpdump с заданными командой параметрами);
  2. файл siptrace.bin дамп (log-файл) SIP-адаптера.

Запись сетевого дампа в CLI на SIP-адаптере

sip1@ecss1 - имя ноды sip адаптера;
bond0.8 - сетевой интерфейс;
port = 5060 - порт с которого необходимо захватить трафик.

В данном случае будет захватываться трафик с 5060 порта. Если необходимо захватить весь трафик, то тогда команда будет выглядеть:

Снятые дампы сохраняются в директории /var/log/ecss/.
Более подробно о запуске tcpdump см. раздел Команды трассировки.

Запись TCP dump в Shell Linux

Для снятия сетевых дампов рекомендуется использовать утилиту tcpdump. Приведем пример для снятия sip трафика между ESCC-10 и узлом сети 192.168.8.207.

где:
-i bond0.8 - сетевой интерфейс с которого снимается дамп;
-w sipdump.pcap - запись снятого дампа в файл sipdump.pcap;
port 5060 and host 192.168.8.207 - фильтр пакетов, сохранять пакеты с портом назначения или источника 5060 и IP адресом назначения или источника 192.168.8.207.

Сохранённый дамп можно посмотреть в консоле с помощью tcpdump:

Полученный дамп можно также открыть с помощью Wireshark.

Логи SIP-адаптера - siptrace.bin

Путь к логу SIP-адаптера: /var/log/ecss/pa_sip/.

Есть возможность сохранять трассировку siptrace сразу в текстовом виде, для этого в файле /etc/ecss/ нужно найти следующую запись:

и поменять её на:

При завершении вызова, в ответе о невозможности установить соединение или запросе о разрушении соединения указана причина согласно рекомендации Q.850.

Также в ответах протокола SIP может содержатся заголовок Warning. Расшифровка заголовка приведена в 3.14.4 Приложение Г. Описание внутренних причин разъединения.

В системах Windows для захвата и последующего анализа сетевого трафика многие из нас пользуются такими известными инструментами как Network Monitor или Wireshark. Захват трафика через эти инструменты в наблюдаемой системе предполагает установку дополнительных компонент, выстраивающихся в функции сетевого обмена. Начиная с Windows 7 / Windows Server 2008 R2 у нас появилась возможность выполнять захват трафика встроенными в систему средствами, то есть мы можем выполнить захват трафика на интересующей нас системе не выполняя непосредственную установку дополнительных программных средств, а полученный в результате захвата файл сетевого дампа в дальнейшем анализировать на той системе где установлены соответствующие средства анализа, например на рабочей станции администратора с установленным Network Monitor.

Для того, чтобы активировать захват сетевого трафика проходящего через все сетевые интерфейсы на интересующей нас системе выполним команду с правами Администратора:

При этом каталог, который мы указываем в качестве сохранения файла захвата должен существовать в файловой системе, иначе мы получим ошибку ' The system cannot find the path specified ' .

image

Если обследуемая система имеет несколько сетевых интерфейсов и нас интересует трафик только на определённом интерфейсе, то синтаксис команды будет выглядеть примерно так:

Захват трафика запущен и после того, как мы выполнили необходимые манипуляции, например воспроизвели изучаемую проблему из-за которой мы и решили анализировать трафик, останавливаем захват трафика командой:

image

В результате будет сгенерирован ETL файл а также CAB архив содержащий дополнительные данные, которые могут потребоваться для анализа сетевых проблем.

Полученный ETL файл копируем на рабочую станцию Администратора, запускаем Network Monitor и открываем файл из меню File > Open > Capture

image

Загруженные данные будут разложены на фреймы с малопонятной структурой, да ещё и с предупреждением в описании практически каждого фрейма типа 'Windows stub parser: Requires full Common parsers. See the "How Do I Change Parser Set Options(Version 3.3 or before) or Configure Parser Profile (Version 3.4)" help topic for tips on loading these parser sets '. Для того чтобы получить более или менее читаемый вид, нужно применить так называемый Parser Profile. Через меню Tools > Options откроем свойства Parser Profiles и назначим в качестве активного профиля – Windows

image

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


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

Tcpdump появился на свет почти 25 лет назад в университете Беркли, до сих пор активно развивается и продолжает оставаться эталоном среди подобных инструментов для операционной системы UNIX. Разработанная специально для него библиотека захвата пакетов libpcap сегодня используется чуть ли не каждым сниффером для UNIX-систем и многими аналогичными программами для Windows.

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

Наедине с консолью

Попробуем разобраться, как работает tcpdump и с какой стороны следует к нему подходить. Открой терминал и запусти программу с правами пользователя root (как и любой сниффер, tcpdump должен иметь полный доступ к сетевым интерфейсам), указав имя сетевого интерфейса и ограничив количество выводимых пакетов десятью:

Ключ -n отключает преобразование IP-адресов в DNS-имена. Теперь попытаемся отследить обмен только с конкретным хостом, например с домашним роутером:

Давай посмотрим, что же нам вывел tcpdump, на примере двух строк, представленных на скриншоте «DNS-запрос глазами tcpdump». Можно легко понять, что это DNS-запрос (порт 53) с хоста 192.168.0.101 хосту 192.168.0.1 и последующий за ним ответ. Но что значат все остальные цифры и знаки?

DNS-запрос глазами tcpdump

DNS-запрос глазами tcpdump

Реверс малвари

В следующей строке мы видим ответ, формат представления которого практически аналогичен запросу, с той лишь разницей, что теперь после идентификатора запроса идет информация о количестве найденных записей (8/2/3) и сами записи (A 213.180.204.3, A 77.88.21.3, A 87.250.250.3. ).

В арсенале tcpdump есть поддержка многих протоколов, благодаря чему он может представить в читаемом виде информацию о протоколах TCP, UDP и ICMP, SMB/CIFS, NFS, AFS, AppleTalk. Но что, если tcpdump ничего не знает об используемом протоколе прикладного уровня или не может определить его? В обычной ситуации он просто выведет информацию о пакете. Она может выглядеть примерно так:

Это TCP-пакет, формат представления информации о котором в tcpdump следующий (поля разделяются запятыми):

  • flags — установленные флаги. Обозначаются символами S (SYN), F (FIN), P (PUSH) и R (RST), точка означает отсутствие установленных флагов;
  • data-seqno — описывает данные, содержащиеся в пакете, в таком формате: first:last, где first и last — номер последовательности первого и последнего байта передаваемых данных, nbytes;
  • ack — следующий номер последовательности (ISN + 1);
  • window — размер окна;
  • options — здесь могут указываться дополнительные сведения, например (максимальный размер сегмента);
  • length — длина пакета.

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

В общем-то, здесь все довольно прозаично. Вначале идет тип обслуживания (TOS), далее время жизни пакета (TTL), идентификатор пакета, смещение от начала первого пакета в цепочке, флаги, используемый прокол транспортного уровня (TCP, UDP, ICMP) и длина.

Продвинутые возможности

Мы уже рассмотрели большинство самых важных возможностей tcpdump, но его функциональность намного шире. Например, мы использовали операторы host и port для указания нужных нам адреса и порта для фильтрации вывода, но что, если нам надо увидеть только пакеты, идущие к указанному адресу, но не исходящие с него? Для этого можно использовать оператор src:

Есть и его обратный вариант dst, предназначенный для указания адреса назначения. Как было показано выше, все операторы можно комбинировать с помощью оператора and (мониторинг сетевого трафика, исключая SSH-сессии и DNS-запросы):

Также можно использовать or (или) и except (не). Кроме того, tcpdump понимает диапазоны портов:

Умеет отфильтровывать пакеты по их размеру:

И понимает маски подсетей:

Одна из самых интересных возможностей tcpdump — это умение фильтровать пакеты по содержанию конкретных битов или байтов в заголовках протоколов. Для этого используется такой формат: proto[expr:size], где proto — протокол, expr — смещение в байтах от начала заголовка пакета, а size — необязательное поле, указывающее на длину рассматриваемых данных (по умолчанию 1 байт). Например, чтобы отфильтровать только пакеты с установленным флагом SYN (инициация TCP-рукопожатия), следует использовать такую запись:

Как это работает? Очень просто. 13 байт TCP-заголовка содержит флаги, ровно восемь штук, по биту на каждый. Под флаг SYN отведен второй бит. Приведенная запись просто проверяет факт установки этого бита. Кстати, более читаемый вид этой записи будет выглядеть так:

Практическое использование

Утилиту tcpdump принято использовать для двух целей: для отладки сети, сетевых приложений и новых протоколов и для обучения основам TCP/IP. Мы пойдем другим путем и воспользуемся возможностями tcpdump для выявления фактов сканирования хоста и проведения сетевых атак.

На рис. 1 показано, как выглядит классический TCP-скан портов, выполненный утилитой Nmap, в логах tcpdump. Хорошо видно, как Nmap с адреса 192.168.0.100 пытается установить TCP-соединение с разными портами, посылая SYN-пакет (S в поле флагов). Сначала идет проба порта 8888, в ответ приходит RST-пакет, а это значит, что порт не прослушивается ни одним сервисом, далее проба порта 587 с тем же результатом. Наконец, Nmap посылает SYN-пакет на 22-й порт (SSH) и получает ответ в виде пакета SYN-ACK:

Порт открыт, и теперь Nmap может успешно закрыть соединение с помощью отправки RST-пакета и перейти к следующим портам. Однако он поступает умнее: посылает подтверждение приема ACK-пакета и сразу переходит к следующим портам. Такое поведение позволяет обойти некоторые системы обнаружения вторжений, но человека, вооруженного сниффером, так просто не проведешь.

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

Рис. 1. Классическое TCP-сканирование

Рис. 1. Классическое TCP-сканирование

Теперь рассмотрим другой метод обнаружения открытых портов — SYN-сканирование (nmap -sS). Такой вид скана принято называть скрытым, потому что во время его никогда не устанавливается полное TCP-соединение, а значит, информация о факте соединения не попадает в логи. Вывод tcpdump для такого вида скана представлен на рис. 2. Он очень похож на лог обычного TCP-сканирования, однако реакция сканера на открытые порты теперь другая:

Рис. 2. Скрытое SYN-сканирование

Рис. 2. Скрытое SYN-сканирование

Рис. 3. UDP-сканирование

Рис. 3. UDP-сканирование

В противном случае порт считается открытым. Еще один метод сканирования: null-сканирование с помощью отправки пакетов, не содержащих ни одного установленного флага (nmap -sN). Реакция на такие пакеты может быть разной в зависимости от используемой ОС, но, как видно по следующему листингу, Linux отвечает на них посылкой RST-пакетов:

Также атакующий может применять Xmas-сканирование, при котором пакеты имеют установленные флаги FIN, URG и PUSH (пакет как бы светится флагами, как новогодняя елка):

С помощью tcpdump можно также отследить и различные виды флуда. Например, классический ICMP-флуд в логах будет выглядеть так:

Взаимодействие с другими программами

Здесь мы использовали опцию -w - для записи дампа в стандартный вывод и перенаправили его wireshark, работающему на локальной машине. Таким же образом можно проанализировать трафик с помощью snort:

Перенаправив вывод программы на вход grep, можно найти различные проблемы в работе сети, например выявить пакеты с неправильной контрольной суммой, вывести информацию о которой можно с помощью флага -vv:

Админские штучки

Возможность фильтрации пакетов по данным, содержащимся в заголовке, которую мы рассмотрели в начале первого раздела, очень удобно использовать для отладки различных протоколов и поиска сетевых проблем. Например, мы можем применить ее для отлова сетевых пакетов, передаваемых по протоколу Cisco Discovery Protocol, по которому маршрутизаторы Cisco обмениваются информацией о топологии и состоянии сети:

Таким же образом можно отловить все пакеты, передаваемые по протоколу DHCP (DISCOVER, REQUEST, INFORM), чтобы выявить проблемы подключения клиентов:

Или поймать пакеты, передаваемые в рамках POP3-аутентификации:

Сетевой grep

Сниффер tcpdump хорош своей универсальностью и разнообразием возможностей, однако для поиска конкретных данных внутри передаваемых пакетов его использовать не так просто и удобно. С этой задачей гораздо лучше справляется ngrep, предназначенный для отображения проходящих сетевых пакетов, удовлетворяющих заданной маске.

Анализируем SMTP-трафик на всех сетевых интерфейсах:

Опции tcpdump

Таблица наиболее интересных и полезных флагов tcpdump.

  • -i [интерфейс] — прослушиваемый сетевой интерфейс, для всех следует указать any.
  • -n — не преобразовывать IP-адреса в DNS-имена.
  • -nn — не преобразовывать IP-адреса и номера портов.
  • -X — показывать содержимое пакета в текстовом и шестнадцатеричном форматах.
  • -XX — то же самое плюс содержимое Ethernet-фрейма.
  • -v, -vv, -vvv — увеличить количество показываемой информации и пакетов (больше, еще больше, все).
  • -c [n] — показывать только первые n пакетов.
  • -s [n] — количество байтов, отображаемых для каждого пакета (можно уменьшить для удобства чтения или увеличить для получения большей информации).
  • -S — показывать абсолютные номера TCP-последовательности (TCP sequence numbers).
  • -e — показывать заголовки Ethernet-фреймов.
  • -q — показывать меньше информации (для удобства чтения).
  • -E — расшифровать IPsec-трафик с помощью указанного ключа.
  • -w — сохранить дамп программы в файл, аргумент - используется для указания stdout.

Выводы

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

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

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

Генерация дампов TCP

Анализ дампов TCP с помощью Wireshark

Чтобы, к примеру, установить tcpdump (Ubuntu), используйте команду: «apt-get install tcpdump».

Запуск TCPDUMP

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

  • «tcpdump -D»: показать все доступные интерфейсы;
  • «tcpdump -i eth0»: захватить трафик на интерфейсе «eth0»;
  • «tcpdump -i any»: захватить трафик на любом интерфейсе;
  • «tcpdump -i wlan0 port 80»: захватить трафик на интерфейсе «wlan0», проходящий через порт 80;
  • «tcpdump -i wlan0 -c 5»: захватить 5 пакетов на интерфейсе «wlan0»;
  • «tcpdump -i wlan0 tcp»: захватить только TCP-трафик на интерфейсе «wlan0»;
  • «tcpdump -i wlan0 src 192.168.1.1»: захватить трафик на интерфейсе «wlan0», источником которого является IP-адрес 192.168.1.1;
  • «tcpdump -i wlan0 dst 192.168.1.1»: захватить трафик на интерфейсе «wlan0», отправляемый по IP-адрес 192.168.1.1;
  • «tcpdump “src port 22” and “dst host 1.2.3.4”»: несколько разных команд tcpdump, объединенные с помощью булевых операторов;
  • «tcpdump -i wlan0 -s 65535»: захватить трафик на интерфейсе «wlan0» размером 65535 байт. Значением по умолчанию на данный момент является 262144 байт (более старые версии tcpdump по умолчанию захватывали всего 68 или 96 байт);
  • «tcpdump -i wlan0 -w dump.pcap»: захватить трафик на интерфейсе «wlan0» и записать результат в файл библиотеки libpcap (расширение «.pcap»);
  • «tcpdump -r dump.pcap»: прочитать захваченный файл (более предпочтительно для анализа файлов «.pcap» использовать Wireshark).

Примечание. Если вы планируете анализировать пакеты с помощью Wireshark, вам необходимо записывать их в файл «.pcap» с помощью аргумента «-w».

Ниже приведена команда, которую мы можем вам рекомендовать использовать в тех случаях, когда вы не планируете использовать слишком много фильтров и хотите проанализировать захваченные пакеты с помощью Wireshark:

Предварительная обработка и анализ с помощью Wireshark

Предварительная обработка и анализ с помощью Wireshark

После создания файла «.pcap» с помощью утилиты tcpdump вы можете для анализа вашего трафика использовать богатый инструментарий графического пользовательского интерфейса программы-анализатора трафика Wireshark. Более подробно о том, как использовать Wireshark, читайте в этом разделе. Но прежде, чем перейти непосредственно к анализу, необходимо провести предварительную обработку собранных вами результатов. Среди важных вещей, которые требуют вашего внимания, следующие:

Чтобы изменить формат даты и времени в WireShark используйте «View -> Time Display Format» («Вид» -> «Формат отображения времени»).

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

Например, у вас есть сервер ESB WSO2, работающий в часовом поясе UTC-7:00. Ваши лог-файлы ESB-системы будут сгенерированы по времени этого часового пояса, как и дампы TCP, так как будут созданы на этом же сервере. Затем вы пытаетесь проанализировать дампы TCP из часового пояса UTC+2:00.

Теперь предположим, что некий TCP-пакет прошел через ESB-сервер в 8 часов утра 7 января 2019 года. Но когда вы откроете этот дамп TCP в своей часовой зоне для анализа времени этого пакета, оно будет отображаться как 5 часов вечера 7 января 2019 года. Это связано с тем, что Wireshark корректирует время пакета в соответствии с вашим часовым поясом.

Но когда вы захотите сравнить эти данные, например, с лог-файлами ESB-сервера, который находиться не в вашей временной зоне, а в часовом поясе UTC-7:00, вы не сможете сделать это корректно. Поэтому сначала вам нужно сдвинуть время в TCP-пакетах на 9 часов, после чего вы сможете связать его с временными метками лог-файла сервера WSO2 ESB.

Таким образом, при работе с инструментарием editcap для выше озвученного нами примера вам стоит ввести: «editcap -t 32400 mytcpdump.pcap», что будет соответствовать увеличению временных меток в вашем файле «mytcpdump.pcap» на 32400 секунд, то есть на необходимые нам +9 часов.

Выводы

Анализ TCP с помощью Wireshark и других программ

Если вы столкнулись с необходимостью устранить общие проблемы с сетью, то лучший способ сделать это — проанализировать поток TCP-пакетов в сети. Инструментарий для такого анализа доступен совершенно бесплатно и не сложен в работе. Для тех, кто хочет узнать больше, в статье вы найдёте ссылки, по которым сможете почерпнуть больше информации по всем вопросам, которые возникнут у вас в процессе работы!

Подписывайтесь на рассылку, делитесь статьями в соцсетях и задавайте вопросы в комментариях!

Читайте также: