Есть ли инструмент для разделения файла захвата пакетов (в формате pcap) на отдельные файлы для каждого TCP-соединения? (кроме собственного сценария оболочки, который, вероятно, должен дважды запускать захват ...). Что-то вроде wirehark 'follow TCP stream', но для командной строки (я боюсь, что wirehark будет потреблять большой объем памяти при отображении захвата пакета 700 МБ)
я смотрел на tcpflow но кажется, что он создает файлы намного большего размера, чем исходные файлы pcap, и, похоже, они не в формате pcap.
Ты можешь использовать tcpdump
чтобы извлечь нужные вам части pcap ... предположим, вы ищете пакеты в сокетном соединении между TCP / 55777 на одном хосте и TCP / 80 на другом. Ваш исходный файл bigfile.pcap
, который представляет собой дамп сниффера многих HTTP-сеансов на рассматриваемый веб-хост ...
tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777
Это потянет все пакеты, идущие к и от TCP / 55777 в bigfile.pcap
и скопируйте их в session.pcap
.
Вы также можете использовать PcapSplitter который является частью PcapPlusPlus пакет. Он делает именно то, что вам нужно (разбивает файлы pcap по TCP или UDP-соединению), он многоплатформенный и не имеет ограничения на количество подключений в исходном файле (так что вы можете использовать его для разделения большого pcap, содержащий тысячи соединений или даже больше). Ссылка выше предназначена для исходного кода, но если вам нужен скомпилированный двоичный файл - Вот это ссылка на двоичные файлы, которые я сделал для нескольких платформ
РЕДАКТИРОВАТЬ: по-видимому, была выпущена новая версия PcapPlusPlus, которая содержит двоичные файлы PcapSplitter для довольно многих платформ (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Я думаю, что лучше использовать эти двоичные файлы, чем ссылку, которую я ранее предоставил. Вы можете найти это Вот
Немного перебор, но использование tshark
(поставляется с wireshark
), вы могли бы сделать с zsh
:
file=file.pcap
tshark -Tfields -e tcp.stream \
-e frame.time_epoch \
-e ip.src \
-e tcp.srcport \
-e ip.dst \
-e tcp.dstport -r $file |
sort -snu |
while read -A f; do
tshark -r $file -2R "tcp.stream == $f[1]" -w ${(j:-:)f[2,-1]}.pcap
done
Что генерирует файлы с именами как 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap
(на основе первого пакета для каждого соединения).
tcpflow - это то, что вы хотите - разбивает pcaps в один файл за сеанс TCP
Кажется, есть этот инструмент, который может сработать (лично я им не пользовался)
http://www.netresec.com/?page=SplitCap (на базе Windows)
SplitCap - это бесплатный (как в пиве) сплиттер файлов pcap с открытым исходным кодом. SplitCap разбивает один большой файл pcap на несколько файлов на основе сеансов TCP и UDP, по одному файлу pcap на сеанс. SplitCap также можно использовать для разделения файла pcap на один файл pcap для каждой пары хостов вместо сеанса.
вдохновленная @sch, вот версия bash:
file=cap.pcap
$tshark -Tfields -e tcp.stream \
-e frame.time_epoch \
-e ip.src \
-e tcp.srcport \
-e ip.dst \
-e tcp.dstport -r $file |
sort -snu |
while read -a f; do
[[ "${f[5]}" ]] || continue # sometimes there is no stream number ex. UDP
fileout=$(echo ${f[0]}__${f[1]}__${f[2]}__${f[3]}__${f[4]}__${f[5]} | tr -d '\r' )
$tshark -r $file -2R "tcp.stream == ${f[0]}" -w "$fileout.pcap"
done
read
имя файла будет таким: stream number__time__source IP__port__destination IP__port.pcap
tr -d '\r'
предназначен для пользователей Windows, потому что tshark в Windows выводит CR LF.
редактировать:
это решение с tshark настолько медленное, но верное. SplitCap очень быстрый, но когда в каком-то пакете возникает ошибка, он вылетает, а tshark только сообщает вам об ошибке, но продолжает:
tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.
и, наконец, есть PcapSplitter, который тоже очень быстрый, но ему нужен драйвер winpcap, он не работает с драйвером npcap в Windows.
Но есть решение SplitCap: использовать pcapfix Я могу исправить поврежденные пакеты, тогда SplitCap больше не выйдет из строя. и это то, что я использую сейчас, потому что tshark так медленно разделяется.
и решение для PcapSplitter, которое я сделал, заключалось в том, чтобы внедрить dll winpcap любым методом, но пока у нас есть SplitCap, зачем это делать?