инструмент для разделения файлов pcap по TCP-соединению? [закрыто]

16

Существует ли инструмент для разделения файла захвата пакета (в формате pcap) на отдельные файлы для каждого соединения TCP? (кроме сценария оболочки, выращенного в домашних условиях, который, вероятно, должен запускаться дважды при захвате ...) Что-то вроде wireshark 'follow TCP stream', но для командной строки (боюсь, что wireshark будет занимать большой объем памяти при отображении захвата пакета 700 МБ)

Я посмотрел на tcpflow, но, похоже, он создает файлы намного больше, чем исходные файлы pcap, и они, похоже, не в формате pcap.

Андре Хольцнер
источник
Файлы, полученные в результате tcpflow, не являются pcaps, они являются фактическими полезными данными tcp потоков tcp.
Крис

Ответы:

9

Вы также можете использовать PcapSplitter, который является частью пакета PcapPlusPlus . Он делает именно то, что вам нужно (это расщепление файлов pcap по TCP или UDP-соединению), он мультиплатформенный и не имеет ограничения на количество соединений в исходном файле (так что вы можете использовать его для разделения большого файл pcap, содержащий тысячи соединений или даже больше). Ссылка выше для исходного кода, но если вы хотите скомпилированный двоичный файл - вот ссылка для двоичных файлов, которые я сделал для нескольких платформ

РЕДАКТИРОВАТЬ: очевидно, была выпущена новая версия PcapPlusPlus, и она содержит двоичные файлы PcapSplitter для довольно большого количества платформ (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Я думаю, что лучше использовать эти двоичные файлы, чем ссылку, которую я ранее предоставил. Вы можете найти это здесь

fx23
источник
10

Вы можете использовать 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.

Майк Пеннингтон
источник
Оказывает ли -s0какое-либо влияние при использовании вместе с -r?
Касперд
4

Немного излишне, но используя 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

Который генерирует файлы с именем like 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(на основе первого пакета, видимого для каждого соединения).

сЧ
источник
3

tcpflow - то, что вы хотите - разбивает pcaps на один файл за сеанс TCP

http://www.circlemud.org/jelson/software/tcpflow/

Сэм
источник
3
как упоминалось в вопросе, я попробовал это и не понял, почему полученные выходные файлы были намного больше, чем входные (pcap) файлы ...
Андре Хольцнер,
1
также tcpflow не может выводить файлы pcap.
Такумар
2

Кажется, есть этот инструмент, который может работать (я не использовал его лично)

http://www.netresec.com/?page=SplitCap (для Windows)

SplitCap - это бесплатный (как в пиве) файл-разветвитель с открытым исходным кодом pcap. SplitCap разделяет один большой файл pcap на несколько файлов на основе сеансов TCP и UDP, по одному файлу pcap за сеанс. SplitCap также можно использовать для разделения файла pcap на один файл pcap для каждой пары хостов вместо сеанса.

вольнодумцем
источник
1

вдохновленный @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, зачем это делать?

Бадр Элмерс
источник