Ich möchte auf einfache Weise alle TCP-Daten (nicht die TCP-Header oder andere) anzeigen, die über eine beliebige Schnittstelle auf meiner Linux-Box übertragen werden.
Zum Beispiel möchte ich einen magischen Befehl, der, wenn ich es tue:
magic_commmand_I_want port=1234
Wenn dann ein Server an Port 1234 auf meinem Computer 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:
- IP-Adressen oder andere Metadaten nicht anzeigen
- zeigen nur die "Daten", die gesendet werden, nicht einzelne Pakete und deren Header
- Drucken Sie die Daten wie sie sind, nicht hexadezimal und nicht mit Paket-Offset-Markierungen
- den gesamten Netzwerkverkehr abhören (egal ob auf eth0 oder eth1 oder lo , etc ...)
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.
quelle
Antworten:
Aktualisieren:
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
(wurde auch in der neuesten Version
-J
geändert-g
)Vielen Dank an yves für den Hinweis auf " tcpflow ". Hier ist die Kommandozeile:
Das macht alles was ich will
Das "
-C
" weist es an, statt einer Datei einen Speicherauszug auf die Konsole zu erstellen. Das "-e
" aktiviert Farben, damit Client -> Server und Server -> Client optisch voneinander getrennt sind.Ich habe tcpflow einfach so installiert
quelle
-e
Option zur Angabe des Scannernamens verwendet. Daher wird der Fehler "Ungültiger Scannername '8983'" gedruckt. Der richtige Befehl lautetsudo tcpflow -i any -C -J port 1234
-J
geändert wurde-g
.socat ist das Werkzeug, nach dem Sie fragen. Es kann als Proxy fungieren:
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:
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:
quelle
Probieren Sie Wireshark . Es ist ein hervorragender Protokollanalysator, der sowohl für Linux als auch für Windows geeignet ist.
quelle
tcpflow ist was du willst. Auszug aus der Manpage:
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:
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.
quelle
ngrep
ist sehr schön dafür. 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.quelle
Schauen Sie sich Chaosreader an . Obwohl es ein bisschen mehr tut als Sie verlangen und ein wenig anders ist, könnten Sie wahrscheinlich den Code ändern, um das zu tun, was Sie wollen.
quelle
Vielleicht können Sie einen Wrapper für tcpdump schreiben, der alle redundanten Informationen entfernt
quelle