Tool zum Aufteilen von pcap-Dateien per TCP-Verbindung? [geschlossen]

16

Gibt es ein Tool zum Aufteilen einer Paketerfassungsdatei (im pcap-Format) in separate Dateien für jede TCP-Verbindung? (Anders als ein selbst erstelltes Shell-Skript, das wahrscheinlich zweimal über das Capture laufen muss ...). So etwas wie "Follow TCP Stream" von Wireshark, aber für die Befehlszeile (Ich befürchte, dass Wireshark bei der Anzeige einer 700-MB-Paketerfassung eine große Menge an Speicher verbraucht.)

Ich habe mir tcpflow angesehen, aber es scheint Dateien zu produzieren, die viel größer sind als die ursprünglichen pcap-Dateien, und sie scheinen nicht im pcap-Format zu sein.

Andre Holzner
quelle
Die Dateien, die aus tcpflow resultieren, sind keine pcaps, sondern die tatsächlichen tcp-Nutzdaten der tcp-Streams.
Chris

Antworten:

9

Sie können auch den PcapSplitter verwenden, der Teil des PcapPlusPlus- Pakets ist. Es tut genau das, was Sie benötigen (dh, es teilt PCAP-Dateien über eine TCP- oder UDP-Verbindung auf), es ist plattformübergreifend und die Anzahl der Verbindungen in der Originaldatei ist nicht begrenzt (Sie können es also zum Teilen einer großen Datei verwenden) pcap-Datei mit Tausenden von Verbindungen oder mehr). Der obige Link ist für den Quellcode, aber wenn Sie eine kompilierte Binärdatei wollen - hier ist ein Link für Binärdateien, die ich für mehrere Plattformen erstellt habe

BEARBEITEN: Anscheinend wurde eine neue Version von PcapPlusPlus veröffentlicht, die PcapSplitter-Binärdateien für eine Vielzahl von Plattformen enthält (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian). Ich denke, es ist besser, diese Binärdateien zu verwenden, als den Link, den ich zuvor bereitgestellt habe. Sie finden es hier

fx23
quelle
10

Sie können die tcpdumpgewünschten Teile des PCs extrahieren ... Angenommen, Sie suchen nach Paketen in einer Socket-Verbindung zwischen TCP / 55777 auf einem Host und TCP / 80 auf einem anderen. Ihre Quelldatei ist bigfile.pcap, das ist ein Sniffer-Dump von vielen HTTP-Sitzungen an den betreffenden Webhost ...

tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777

Dadurch werden alle Pakete, die zu und von TCP / 55777 gehen, eingezogen bigfile.pcapund kopiert session.pcap.

Mike Pennington
quelle
Hat -s0es eine Wirkung, wenn es zusammen mit verwendet wird -r?
Kasperd
4

Ein bisschen übertrieben, aber mit tshark(im Lieferumfang enthalten wireshark) können Sie Folgendes tun 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

Welche Dateien mit dem Namen wie 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(basierend auf dem ersten Paket für jede Verbindung gesehen) generiert .

sch
quelle
3

tcpflow ist das, was Sie wollen - teilt pcaps in eine Datei pro TCP-Sitzung auf

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

Sam
quelle
3
Wie in der Frage erwähnt, habe ich es versucht und nicht verstanden, warum die resultierenden Ausgabedateien viel größer als die Eingabedateien (pcap) waren ...
Andre Holzner
1
auch tcpflow scheint pcap-dateien nicht ausgeben zu können.
Takumar
2

Es scheint dieses Tool zu geben, das funktionieren könnte (ich habe es nicht persönlich benutzt)

http://www.netresec.com/?page=SplitCap (Windows-basiert)

SplitCap ist ein kostenloser (wie in Bier) Open Source-PCAP-Dateisplitter. SplitCap teilt eine große pcap-Datei basierend auf TCP- und UDP-Sitzungen in mehrere Dateien auf, eine pcap-Datei pro Sitzung. SplitCap kann auch verwendet werden, um eine pcap-Datei anstelle einer Sitzung in eine pcap-Datei pro Host-Paar zu teilen.

Freidenker
quelle
1

inspiriert von @sch hier ist eine bash version:

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

Der Dateiname wird so aussehen: stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' ist für Windows-Benutzer, weil tshark in Windows CR LF ausgibt.

Bearbeiten :

Diese Lösung mit tshark ist so langsam, aber sicher. SplitCap ist super schnell, aber wenn es einen Fehler in einem Paket gibt, stürzt es ab, während tshark Sie nur über den Fehler informiert, aber fortfährt:

tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.

und schließlich gibt es PcapSplitter, der auch super schnell ist, aber den winpcap-Treiber benötigt, er funktioniert nicht mit dem npcap-Treiber in Windows.

Aber es gibt eine Lösung für SplitCap: Mit pcapfix kann ich die beschädigten Pakete reparieren, dann stürzt SplitCap nie wieder ab. und das ist es, was ich jetzt benutze, weil der Hai so langsam spaltet.

und eine Lösung für PcapSplitter, die ich gemacht habe, war das Injizieren der winpcap-DLL mit einer beliebigen Methode, aber während wir SplitCap haben, warum?

Badr Elmers
quelle