Was ist der einfachste Weg, TCP-Verkehrsdaten unter Linux zu schnüffeln?

Ich möchte eine einfache Möglichkeit, alle TCP-Daten (nicht die TCP-Header oder irgendetwas anderes) anzuzeigen, die über eine Schnittstelle in meiner Linux-Box gehen.

Zum Beispiel möchte ich einen magischen Befehl, wenn ich Folgendes tue:

magic_commmand_I_want port=1234

Wenn dann auf meinem Computer ein Server auf Port 1234 lauschte und jemand Folgendes 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 nur ausdrucken:

hello

Ich habe "tcpdump", "ethereal", "tethereal", "tshark" und andere ausprobiert, aber es ist nicht offensichtlich, wie du bringen Sie sie zu:

  • keine IP-Adressen oder andere Metadaten anzeigen
  • zeigt nur die gesendeten "Daten" an, nicht einzelne Pakete und deren Header
  • drucken Sie die Daten unverändert, nicht in Hex und nicht mit Paket-Offset-Markern
  • sniff alle Netzwerkverkehr (ob es auf eth0 oder eth1 oder lo, etc...)

Ja, könnten Sie wahrscheinlich string zusammen eine Pipe Reihe von unix-Befehlen, dies zu tun, aber das ist nicht sehr einfach zu denken Sie daran für das nächste mal :)

Wenn Sie ein einfaches Beispiel für eine genaue Befehlszeile haben, die dies tut, möchte ich das.

7 answers

Update:

Wie Michal in den Kommentaren darauf hingewiesen hat: Ab tcpflow Version 1.3 wird die Option-e zur Angabe des Scannernamens verwendet. Der Fehler "Ungültiger Scannername '8983' " wird also gedruckt. Der richtige Befehl ist

sudo tcpflow -i any -C -J port 1234

(auch -J wurde in der neuesten Version in -g geändert)


Vielen Dank an yves, dass er mich auf "tcpflow " hingewiesen hat. Hier ist die Commmand-Zeile:

tcpflow -i any -C -e port 1234  # as root, or with sudo

Dies tut alles, was ich möchten

  • zeigt die Daten Byte für Byte an, wie sie in
  • zeigt keine anderen Metadaten an
  • lauscht auf allen Schnittstellen (erfasst also Daten, die von der Maschine und von außen kommen)

Das "-C" weist es an, anstelle einer Datei auf der Konsole zu speichern. Die" -e " aktiviert Farben, sodass client - >server und Server->client visuell unterschiedlich sind.

Ich habe tcpflow installiert, indem ich einfach

sudo apt-get install tcpflow
 112
Author: 4 revs, 4 users 67%Dustin Boswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-01-20 05:03:43

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 Port 4444 verbinden, anstatt direkt eine Verbindung zu 1234 herzustellen

- v Option ist für socat, um alles auszudrucken, was es auf dem Standardfehler (stderr) erhält.

- Aktualisierung:

Wenn socat auf Ihrem Computer nicht verfügbar ist, können Sie es trotzdem mit netcat emulieren:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

Vorbehalte: Diese Option ist unidirektional. die zweite netcat-Instanz druckt jede Reponse 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
 30
Author: yves Baumes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-11 15:46:19

Versuche Wireshark. Es ist ein ausgezeichneter Protokollanalysator für Linux und Windows.

 20
Author: Kevin Boyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-12-01 12:44:34

Tcpflow ist, was Sie wollen. Auszug aus der Manpage:

BESCHREIBUNG
tcpflow ist ein Programm, das erfasst Daten, die als Teil von TCP-verbindungen (flows) und speichert die Daten in einer Weise, die bequem ist für Protokollanalyse oder Debugging. A Programm wie tcpdump(4) zeigt eine zusammenfassung der Pakete auf dem Draht gesehen, aber normalerweise speichert die Daten nicht das wird tatsächlich übertragen. In im Gegensatz dazu rekonstruiert tcpflow die tatsächliche Datenströme und speichert jedes flow in einer separaten Datei für später Analyse. tcpflow versteht TCP sequenznummern und wird richtig rekonstruieren Sie Datenströme unabhängig von Weiterverbreitung oder out-of-order Lieferung.

Tcpflow speichert alle erfassten Daten in dateien mit Namen des Formulars

192.168.101.102.02345-010.011.012.013.45103

, Wobei der Inhalt der obigen Datei würden Daten vom Host übertragen werden 192.168.101.102 port 2345, zu host 10.11.12.13 port 45103.

Richten Sie eine Verbindung von Ihrer Anwendungs-App zu Ihrem Server ein. Wenn die Verbindung hergestellt und ausgeführt wird, kann tcpflow weiterhin Daten daraus capturing Zum 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 in der Standardausgabe mit der Option-Cs umleiten . Lesen Sie die Handbuchseite, um mit expression zu spielen, um die pa abzustimmen, die tcpflow erfassen soll.

 13
Author: yves Baumes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-08-14 15:04:28

ngrep ist sehr schön für diese. Es benötigt eine BPF-Zeichenfolge und eine optionale Zeichenfolge, nach der innerhalb der Pakete gesucht werden soll, und gibt dann den Paketinhalt in einem ziemlich nützlichen Format auf den Bildschirm. Optional werden auch Dumps in eine pcap_dump-Datei erstellt, die Sie später in Wireshark genauer untersuchen können.

 2
Author: hobbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-08-13 23:15:48

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.

 0
Author: Andrew Y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-08-13 23:08:00

Vielleicht können Sie zum Beispiel einen Wrapper für tcpdump schreiben, der alle redundanten Informationen entfernt

 -1
Author: dimba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-08-13 22:47:31