Ich möchte auf einfache Weise alle TCP Daten (nicht die TCP Header oder irgendetwas anderes) anzeigen, die über eine Schnittstelle auf meiner Linux-Box laufen.
Zum Beispiel möchte ich einen magischen Befehl, der, wenn ich es tue:
magic_commmand_I_want port=1234
wenn dann auf meinem Computer ein Server auf Port 1234 lauschte und jemand dies tat:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port
Dann würde der magische Befehl einfach ausdrucken:
hello
Ich habe "tcpdump", "Ethereal", "tethereal", "tshark" und andere ausprobiert, aber es ist nicht klar, wie man sie dazu bringt:
Ja, Sie könnten wahrscheinlich eine Reihe von Unix-Befehlen aneinander reihen, um dies zu tun, aber das ist beim nächsten Mal nicht so einfach zu merken :)
Wenn Sie ein einfaches Beispiel für eine genaue Befehlszeile haben, die dies ausführt, dann ist es das, was ich möchte.
Update:
Michal hat in den Kommentaren darauf hingewiesen: Ab der tcpflow-Version 1.3 wird die Option -e zur Angabe des Scannernamens verwendet. Daher wird der Fehler "Ungültiger Scannername '8983'" gedruckt. Der richtige Befehl lautet
Sudo tcpflow -i any -C -J port 1234
(auch -J
wurde in der neuesten Version in -g
geändert)
Vielen Dank an yves für den Hinweis auf " tcpflow ". Hier ist die Kommandozeile:
tcpflow -i any -C -e port 1234 # as root, or with Sudo
Das macht alles was ich will
Der "-C
" weist ihn an, anstelle einer Datei einen Speicherauszug auf die Konsole zu erstellen. Der "-e
" aktiviert Farben, sodass Client-> Server und Server-> Client optisch voneinander getrennt sind.
Ich habe tcpflow einfach so installiert
Sudo apt-get install tcpflow
socat ist das Werkzeug, nach dem Sie fragen. Es kann als Proxy fungieren:
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
dann muss Ihre Anwendung den Port 4444 verbinden, anstatt sich direkt mit 1234 zu verbinden
Mit der Option -v gibt socat alles aus, was beim Standardfehler (stderr) ausgegeben wird.
Aktualisieren:
Wenn socat auf Ihrem Computer nicht verfügbar ist, können Sie es mit netcat trotzdem so emulieren:
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
vorsichtsmaßnahmen: Diese Option ist unidirektional. Die zweite Netcat-Instanz druckt alle Antworten von Ihrem Server auf die Standardausgabe. Sie können dann noch tun:
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
Versuchen Sie Wireshark . Es ist ein hervorragender Protokollanalysator, der sowohl für Linux als auch für Windows geeignet ist.
tcpflow ist was du willst. Auszug aus der Manpage:
BESCHREIBUNG
tcpflow ist ein Programm, das Daten erfasst, die im Rahmen von TCP -Verbindungen (Flows) übertragen werden, und die Daten auf eine Weise speichert, die für die Protokollanalyse oder das Debuggen geeignet ist. Ein Programm wie tcpdump (4) zeigt eine Zusammenfassung der auf der Leitung gesehenen Pakete an, speichert jedoch normalerweise nicht die tatsächlich übertragenen Daten. Im Gegensatz dazu rekonstruiert tcpflow die tatsächlichen Datenströme und speichert jeden Datenfluss zur späteren Analyse in einer separaten Datei. tcpflow versteht TCP Sequenznummern und rekonstruiert Datenströme korrekt, unabhängig von erneuten Übertragungen oder nicht ordnungsgemäßen Zustellungen.tcpflow speichert alle erfassten Daten in Dateien, die Namen des Formulars haben
192.168.101.102.02345-010.011.012.013.45103
wobei der Inhalt der obigen Datei Daten wären, die vom Host 192.168.101.102-Port 2345 zum Host 10.11.12.13-Port 45103 übertragen werden.
Richten Sie eine Verbindung von Ihrer Anwendungs-App zu Ihrem Server ein. Wenn die Verbindung aktiv ist, kann tcpflow weiterhin Daten von ihr erfassen. Beispiel:
$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo
Alle Daten werden in einer Datei mit dem Namen 127.000.000.001.48842-127.000.000.001.05555 gespeichert.
Sie können dies weiterhin auf der Standardausgabe mit der Option -Cs umleiten. Lesen Sie die Handbuchseite, um mit dem Ausdruck zu spielen und die Paquets abzustimmen, die von tcpflow erfasst werden sollen.
ngrep
ist dafür sehr nett. Die Suche in den Paketen erfordert eine BPF-Zeichenfolge und eine optionale Zeichenfolge. Anschließend werden die Paketinhalte in einem recht nützlichen Format auf dem Bildschirm abgelegt. Optional wird auch ein Speicherauszug in eine pcap_dump-Datei erstellt, die Sie später in Wireshark genauer untersuchen können.
Schauen Sie sich Chaosreader an. Obwohl es ein bisschen mehr tut, als Sie verlangen, und etwas anders, könnten Sie wahrscheinlich den Code ändern, um das zu tun, was Sie wollen.