
TCP/IP-Paket-Demultiplexer. Herunterladen von:
Download-Verzeichnis: http://digitalcorpora.org/downloads/tcpflow/
Die meisten gängigen GNU/Linux-Distributionen liefern tcpflow in ihren Paketquellen aus. Auf Debian/Ubuntu/etc. kann man also eingeben:
sudo apt-get install tcpflow
und auf Fedora/RedHat/CentOS/etc.:
sudo dnf install tcpflow
Das war's. Falls dies aus irgendeinem Grund nicht ausreicht, können Sie aus dem Quellcode bauen:
Um für Linux zu kompilieren:
Stellen Sie sicher, dass Sie die notwendigen Voraussetzungen haben. Es gibt Dateien im Wurzelverzeichnis, die dies für Sie erledigen, abhängig von Ihrem Host-Betriebssystem:
CONFIGURE_ARCH_17_8.sh CONFIGURE_FEDORA_18.sh CONFIGURE_FEDORA_26.sh CONFIGURE_UBUNTU_16_04.sh
Abhängig von Ihrem Betriebssystem einfach:
# sudo bash CONFIGURE_<YOUROS>.sh
Sobald Sie Ihr Betriebssystem konfiguriert haben, kompilieren und installieren Sie mit:
./configure
make
sudo make install
Wenn Sie den Entwicklungsbaum mit git herunterladen möchten, führen Sie einen vollständigen Checkout mit --recursive durch und führen Sie dann bootstrap.sh, configure und make aus:
git clone --recursive https://github.com/simsong/tcpflow.git
cd tcpflow
bash bootstrap.sh
./configure
make
sudo make install
Um für Amazon AMI herunterzuladen und zu kompilieren:
ssh ec2-user@<your ec2 instance>
sudo bash yum -y install git make gcc-c++ automake autoconf boost-devel cairo-devel libpcap-devel openssl-devel zlib-devel
git clone --recursive https://github.com/simsong/tcpflow.git
sh bootstrap.sh
Um für Windows mit mingw auf Fedora Core zu kompilieren:
yum -y install mingw64-gcc mingw64-gcc-c++ mingw64-boost mingw64-cairo mingw64-zlib
mingw64-configure
make
Zur Verwendung von CMake siehe die detaillierten Anweisungen: cmake/README.md
Aus einem sauberen Repository als normaler Benutzer (nicht root):
./bootstrap.sh # Erzeugt die Datei ./configure
./configure # Erzeugt die Datei tcpflow.spec
rpmbuild -bb tcpflow.spec --build-in-place
Überprüfen Sie die Specdatei und das resultierende RPM:
rpmlint tcpflow.spec
rpmlint ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
Installieren:
sudo dnf install ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
tcpflow ist ein Programm, das Daten erfasst, die als Teil von TCP-Verbindungen (Flows) übertragen werden, und die Daten in einer Weise speichert, die für die Protokollanalyse und Fehlersuche praktisch ist. Jeder TCP-Flow wird in einer eigenen Datei gespeichert. Somit wird der typische TCP-Flow in zwei Dateien gespeichert, eine für jede Richtung. tcpflow kann auch gespeicherte 'tcpdump'-Paketflüsse verarbeiten.
tcpflow speichert alle erfassten Daten in Dateien mit Namen der Form:
[timestampT]sourceip.sourceport-destip.destport[--VLAN][cNNNN]
wobei: timestamp ein optionaler Zeitstempel des Zeitpunkts ist, an dem das erste Paket gesehen wurde T ein Trennzeichen ist, das angibt, dass ein Zeitstempel bereitgestellt wurde sourceip die Quell-IP-Adresse ist sourceport der Quellport ist destip die Ziel-IP-Adresse ist destport der Zielport ist VLAN der VLAN-Port ist c ein Trennzeichen ist, das angibt, dass mehrere Verbindungen vorhanden sind NNNN ein Verbindungszähler ist, wenn mehrere Verbindungen mit der gleichen [Zeit]/Quell-IP/Quellport/Ziel-IP/Zielport-Kombination vorhanden sind. Beachten Sie, dass die Verbindungszählung selten auftritt, wenn Zeitstempel-Präfixe verwendet werden.
HIER sind einige Beispiele:
128.129.130.131.02345-010.011.012.013.45103
Der Inhalt der obigen Datei wären Daten, die von Host 128.129.131.131 Port 2345 zu Host 10.11.12.13 Port 45103 übertragen wurden.
128.129.130.131.02345-010.011.012.013.45103c0005
Die sechste Verbindung von 128.129.131.131 Port 2345 zu Host 10.11.12.13 Port 45103.
1325542703T128.129.130.131.02345-010.011.012.013.45103
Eine Verbindung von 128.129.131.131 Port 2345 zu Host 10.11.12.13 Port 45103, die am 2. Januar 2012 um 17:19 Uhr (-0500) begann.
128.129.130.131.02345-010.011.012.013.45103--3
Eine Verbindung von 128.129.131.131 Port 2345 zu Host 10.11.12.13 Port 45103, die auf VLAN-Port 3 gesehen wurde.
Sie können die Vorlage, die zur Erstellung von Dateinamen verwendet wird, mit den Optionen -F und -T ändern. Wenn ein Verzeichnis in der Vorlage erscheint, wird das Verzeichnis automatisch erstellt.
Wenn Sie die Option -a verwenden, interpretiert tcpflow automatisch HTTP-Antworten.
Wenn die Ausgabedatei
208.111.153.175.00080-192.168.001.064.37314
ist, erstellt die Nachbearbeitung die Dateien:
208.111.153.175.00080-192.168.001.064.37314-HTTP
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY
Wenn der HTTPBODY mit GZIP komprimiert war, erhalten Sie möglicherweise auch eine
dritte Datei:
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY-GZIP
Zusätzliche Informationen über diese Streams, wie z.B. ihr MD5-Hashwert,
werden ebenfalls in die DFXML-Datei geschrieben.
tcpflow ähnelt 'tcpdump', da beide Pakete von der Leitung oder aus einer gespeicherten Datei verarbeiten. Es unterscheidet sich jedoch darin, dass es die tatsächlichen Datenströme rekonstruiert und jeden Fluss zur späteren Analyse in einer separaten Datei speichert.
tcpflow versteht Sequenznummern und rekonstruiert Datenströme korrekt, unabhängig von erneuten Übertragungen oder Lieferungen in falscher Reihenfolge. Allerdings versteht tcpflow derzeit keine IP-Fragmente; Flüsse, die IP-Fragmente enthalten, werden nicht korrekt aufgezeichnet.
tcpflow kann einen zusammenfassenden Bericht im DFXML-Format ausgeben. Diese Datei enthält Informationen über das System, auf dem das tcpflow-Programm kompiliert wurde, wo es ausgeführt wurde, und jeden TCP-Fluss, einschließlich Quell- und Ziel-IP-Adressen und Ports, Anzahl der Bytes, Anzahl der Pakete und (optional) den MD5-Hash jedes Bytestroms.
tcpflow verwendet die LBL Packet Capture Library (verfügbar unter ftp://ftp.ee.lbl.gov/libpcap.tar.Z) und unterstützt daher die gleichen umfangreichen Filterausdrücke wie Programme wie 'tcpdump'. Es sollte unter den meisten gängigen UNIX-Varianten kompilieren; siehe die Datei INSTALL für Details.
tcpflow ist ein nützliches Werkzeug zum Verständnis von Netzwerkpaketflüssen und zur Durchführung von Netzwerkforensik. Im Gegensatz zu Programmen wie WireShark, die viele Pakete oder eine einzelne TCP-Verbindung anzeigen, kann tcpflow Hunderte, Tausende oder Hunderttausende von TCP-Verbindungen im Kontext darstellen.
Eine häufige Verwendung von tcpflow besteht darin, die Inhalte von HTTP-Sitzungen offenzulegen. Mit tcpflow können Sie über HTTP heruntergeladene Webseiten rekonstruieren. Sie können sogar Malware extrahieren, die als 'Drive-by-Downloads' ausgeliefert wird.
Jeremy Elson schrieb dieses Programm ursprünglich, um die Daten zu erfassen, die von verschiedenen Programmen gesendet werden, die undokumentierte Netzwerkprotokolle verwenden, um diese Protokolle zu reverse-engineeren. RealPlayer (und die meisten anderen Streaming-Media-Player), ICQ und AOL IM sind gute Beispiele für diese Art von Anwendung. Später wurde es für die HTTP-Protokollanalyse verwendet.
Simson Garfinkel gründete Sandstorm Enterprises im Jahr 1998. Sandstorm entwickelte ein ähnliches Programm namens TCPDEMUX und eine weitere Version des Programms namens NetIntercept. Diese Programme sind kommerziell. Nachdem Simson Sandstorm verlassen hatte, benötigte er ein TCP-Fluss-Rekonstruktionsprogramm. Er fand tcpflow und übernahm dessen Wartung.
Bitte melden Sie Fehler im GitHub-Issue-Tracker
tcpflow versteht derzeit keine IP-Fragmente. Flüsse, die IP-Fragmente enthalten, werden nicht korrekt aufgezeichnet. IP-Fragmentierung ist zunehmend ein seltenes Ereignis, sodass dies kein signifikantes Problem zu sein scheint.
Wenn Sie einen Artikel über tcpflow schreiben, zitieren Sie bitte unseren technischen Bericht:
Simson L. Garfinkel [email protected]
Ich portiere weiterhin bulk_extractor, tcpflow, be13_api und dfxml in modernes C++. Nach Durchsicht der Standards habe ich mich für C++17 und nicht für C++14 entschieden, da die Unterstützung für 17 jetzt weit verbreitet ist. (Ich brauche wahrscheinlich kein 20). Ich bleibe bei Autotools, obwohl es starke Gründe zu geben scheint, zu CMake zu wechseln. Ich behalte be13_api und dfxml als Module, die per Python-Stil eingebunden werden, anstatt sie als eigenständige Bibliotheken zu erstellen, gegen die gelinkt wird. Ich bin mir jedoch nicht 100% sicher, ob das die richtige Entscheidung ist.
Das Projekt dauert länger als erwartet, da ich auch eine allgemeine Code-Refaktorisierung durchführe. Die Hauptsache, die Zeit in Anspruch nimmt, ist herauszufinden, wie man all die C++-Objekte in Bezug auf Parser-Optionen und Konfiguration entwirren kann.
Da sowohl tcpflow als auch bulk_extractor be13_api verwenden, hat sich meine Aufmerksamkeit darauf verlagert, tcpflow zu verwenden, um be13_api betriebsbereit zu machen, da es ein einfacheres Programm ist. Ich bin jetzt etwa drei Viertel durch. Ich rechne damit, vor Ende 2020 etwas fertigzustellen.
--- Simson Garfinkel, 18. Oktober 2020
Dank an: