Время от времени, при проведении различных работ связанных с сетевым обменом требуется анализ трафика между взаимодействующими системами. В редких случаях он проводится «на лету», однако чаще это делается после сбора данных. При этом анализу могут подвергаться большие объемы данных, файлы содержащие их могут иметь размеры в десятки гигабайт либо наоборот быть большим набором мелких файлов. На уже публиковалась заметка посвященная "Фильтрация трафика BPF фильтром", настоящая статья описывает базовые методы работы с файлами сетевым дампов, в основном в формате PCAP: создание, разбиение, объединение и получение информации. Знание этих способов поможет вам подготовить к эффективной обработке сетевые дампы сохраненные в наборе файлов либо в одном файле большой длинны.
Примечание. Фильтрация сетевых данных не исключает разбиение дампов и наоборот. Оба метода могут использоваться одновременно.
Утилиты
Эта статья ориентирована на 2 самых распространенных снифера, это tcpdump и Wireshark. Последний рассматривается в обоих своих реализациях и как одноименная графическая программа (GUI) и как утилита командной строки tshark. Кроме того, описываются утилиты входящие в пакет Wireshark и имеющие отношение к работе с файлами: dumpcap, capinfos, mergecap и editcap.
Примечание. В настоящей статье приведены только некоторые опции программ и утилит. Для получения полного их списка необходимо пользоваться справочной информацией поставляемой с этими программами или опцией -h.
Создание сетевых дампов
В целом файл сетевого дампа может создаваться несколькими способами, которые можно описать следующим образом:
создание одного файла;
создание нескольких файлов:
с ротацией файлов;
с ограничением каждого файла по времени;
с ограничением каждого файла по размеру;
создание нескольких файлов с обработкой на лету.
Сетевые дампы, в пределах рассмотрения этой статьи, могут собираться программами tcpdump, wireshark, tshark и dumpcap. Выбор конкретной программы обусловлен личными пристрастиями специалиста проводящего анализ, либо их наличием на рабочем месте. Далее приводится краткий перечень их параметров, управляющих созданием файлов.
Программа tcpdump имеет следующие опции:
-w <имя файла>: сохраняет перехваченные пакеты в файл с установленным именем;
-С <размер>: проверка размера файла дампа перед записью в него очередного пакета. Если файл больше чем установленный размер, то создается следующий файл. К имени новых файлов добавляется порядковый индекс, который начинается с 1. Размер указывается как максимальная длинна файла в миллионах (10 в степени 6) байт;
-G <период>: похоже на -C, но периодическая смена файла дампа происходит не из-за его размера, а по прошествии заданного интервала времени, задаваемого аргументом в секундах. При этом к имени файла прибавляется время;
Примечание. Время выводится в формате возвращаемом системной функцией strftime. В случае если ее возвращаемое значение не определено, то файл циклически переписывается (случай на стенде автора).
-C и -G: эти параметры могут использоваться одновременно, при этом сначала к имени файла прибавляется индекс, а за тем время;
-W <количество>: ограничение количества файлов. Вместе с опцией -C обеспечивает циклическую перезапись файлов (в отличии от чистой -C первый файл также имеет индекс, он равен 0). Вместе с опцией -G ограничивает общее количество файлов. Также может совместно применяться с обоими опциями -G и -C;
-z <команда>: вместе с опциями C и G после переключения на новый файл позволяет выполнить команду на лету типа «команда «имя файла»». Командой может выступать скрипт, или простая команда вроде gzip или bzip2. Аргумент — название команды.
Программа tshark имеет следующие опции:
-w <имя файла>: аналогично tcpdump;
-a: прекращение записи в файл по удовлетворению заданного условия. Условие задается в виде test:value:
duration:X — прекращение записи после X секунд;
filesize:X — прекращение записи в файл после того как его размер превысит X килобайт.
files:X — прекращение записи после достижения количества файлов X. Применяется в комбинации с первыми двумя условиями.
Примечание. В случае если надо задать несколько условий, то опцию -a надо писать перед каждым.
-b: аналогично -a но запись не прекращается, а продолжается в новый файл. При этом его имя складывается из имени заданного в -w номера и даты. Если указывается параметр files, то запись производится циклически.
-a и -b: эти опции могут применяться вместе, при этом циклическая запись в соответствии с опцией -b будет прекращена по условию заданному в -a.
Примечание. В контексте этой статьи аналогом tshark является другая программа из пакета Wireshark, которая называется dumpcap.
Возможности программы Wireshark аналогичны tshark, с той лишь разницей, что настойка производится с помощью графической формы. Окно настроек показано на следующей , обратите внимание на области «Capture File(s)» и «Stop Capture...».
Рисунок — Настройки снифера Wireshark
Получение информации о файлах дампов
Для получения общей информации о файле сетевого дампа необходимо использовать утилиту capinfos, которая позволяет определить следующие характеристики:
тип дампа;
тип канала в котором производился перехват;
количество сохраненных пакетов;
размер файла и данных в нем;
время начала и конца перехвата пакетов, а также продолжительность перехвата;
скорость информационного потока;
средний размер пакета.
Тип дампа определяет способ хранения информации в файле. Надо сказать, что Wireshark и входящие в него утилиты поддерживает достаточно большой перечень типов, который, для версии 1.0.2, включает:
libpcap - Wireshark/tcpdump/... - libpcap
nseclibpcap - Wireshark - nanosecond libpcap
modlibpcap - Modified tcpdump - libpcap
nokialibpcap - Nokia tcpdump - libpcap
rh6_1libpcap - RedHat 6.1 tcpdump - libpcap
suse6_3libpcap - SuSE 6.3 tcpdump - libpcap
5views - Accellent 5Views capture
dct2000 - Catapult DCT2000 trace (.out format)
nettl - HP-UX nettl trace
netmon1 - Microsoft NetMon 1.x
netmon2 - Microsoft NetMon 2.x
ngsniffer - NA Sniffer (DOS)
ngwsniffer_1_1 - NA Sniffer (Windows) 1.1
ngwsniffer_2_0 - NA Sniffer (Windows) 2.00x
niobserverv9 - Network Instruments Observer (V9)
lanalyzer - Novell LANalyzer
snoop - Sun snoop
rf5 - Tektronix K12xx 32-bit .rf5 format
visual - Visual Networks traffic capture
k12text - K12 text file
commview - TamoSoft CommView
pcapng - Wireshark - pcapng (experimental)
Другой интересной характеристикой является количество пакетов и временные параметры дампа. Последние могут иметь роль, если в названиях файлов не отражается время их создания.
Пример вывода команды capinfos, для двух файлов содержащих одну и туже информацию, но в разных типах дампов, показан далее:
root@grub-book:/home/grub# capinfos file1
File name: file1
File type: Wireshark/tcpdump/... - libpcap
File encapsulation: Ethernet
Number of packets: 2
File size: 236 bytes
Data size: 196 bytes
Capture duration: 0.000028 seconds
Start time: Thu Jun 3 21:14:38 2010
End time: Thu Jun 3 21:14:38 2010
Data rate: 6966810.03 bytes/s
Data rate: 55734480.27 bits/s
Average packet size: 98.00 bytes
root@grub-book:/home/grub# capinfos file4.ln
File name: file4.ln
File type: Novell LANalyzer
File encapsulation: Ethernet
Number of packets: 2
File size: 3270 bytes
Data size: 196 bytes
Capture duration: 0.000028 seconds
Start time: Thu Jun 3 00:00:00 2010
End time: Thu Jun 3 00:00:00 2010
Data rate: 7026355.42 bytes/s
Data rate: 56210843.35 bits/s
Average packet size: 98.00 bytes
Разбиение сетевых дампов
Для разбиения сетевых дампов необходимо пользоваться программой tcpdump. К сожалению использовать Wireshark или tshark не удастся (поправьте меня если ошибаюсь). Но при этом необходимо использовать не перехват с сетевого интерфейса, а чтение из большого файла. Для этого используется аргумент -r. Важно, что при разбиении больших сетевых дампов, времена их создания и перехвата отдельных пакетов не изменяются.
Например, один файл большого размера bigdump может быть разбит на более мелкие фрагменты размером примерно 1 МБ следующей командой:
tcpdump -r bigdump -w smalldump -C 1
Также для разбиения дампов может использоваться программа editcap, с помощью которой можно выбирать из исходного дампа определенные пакеты или их диапазоны. При этом, зная средний размер пакета и скорость информационного потока (информация полученная с помощью capinfos) можно примерно регулировать размер выходных файлов.
Примечание. Для чтения файлов дампов нет необходимости иметь права супер-пользователя, достаточно обладать правами на чтение файла сетевого дампа.
Объединение сетевых дампов
В противоположность ранее приведенному сценарию может возникнут необходимость в объединении нескольких файлов дампов в один. Поскольку в файлах дампов также содержится служебная информация (сравните вывод «File size» «Data size» утилиты capinfos), то одной программой cat тут не обойдешься. В этом случае необходимо использовать утилиту mergecap, входящую в состав Wireshark.
Для использования с mergecap необходимо знать только один ключ -w в котором указывается имя объединенного файла, исходные файлы указываются обычным списком в конце команды. В следующем примере из файлов file1 и file2 будет сделан файл mergefile, объединяющий их содержимое:
mergecap -w mergefile file1 file2
Аналогично со случаем разбиения дампов, время перехвата отдельных пакетов остается неизменным.
Порядок следования файлов, по умолчанию определяется их временем перехвата. Но он может быть с помощью флага -a. В этом случае пакеты записываются в очередности перечисления исходных файлов.
Преобразование файлов PCAP
В случае если необходимо осуществить преобразование от одного формата дампа к другому необходимо использовать утилиту editcap. Она автоматически определяет формат входного файла (в пределах поддерживаемых типов), а с помощью флага -F можно задать формат выходного файла, в том числе может использоваться и формат источник. По умолчанию формат выходного файла PCAP.
Например, следующая команда принимает на вход файл dump и преобразует его в dump.snoop в формате Sun snoop:
editcap -F snoop dump dump.snoop
Кроме того, утилита editcap обладает достаточно интересными опциями, позволяющими осуществлять различные манипуляции с файлами, например, корректировать время перехвата пакетов, выбирать диапазон преобразуемых или выбираемых пакетов или вносить ошибки в дампы.