Wie man tcpdump so einstellt, dass IP und Portnummer angezeigt werden, aber nicht Hostname und Protokoll

42

Ich verwende tcpdump für einige Tests. Ich möchte die IP- und Portnummer sehen, aber die Ausgabe von tcpdump ist wie folgt

IP pl1snu.koren.kr.http > kitch.pl.sophia.inria.fr.dnp: Flags [P.], seq 54:72, ack 1, win 5792, length 18

es zeigt nur den Hostnamen und das Protokoll für http, es ist leicht zu wissen, dass es 80 ist, aber für dnp muss ich suchen

Ist es also möglich, tcpdump so zu machen, dass IP und Portnummer angezeigt werden, aber nicht Hostname und Protokoll? Wenn ja, wie? Vielen Dank

misteryes
quelle

Antworten:

44

Fügen Sie -nIhrer tcpdumpBefehlszeile hinzu.

Aus der tcpdump-Manpage :

-n Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.

Es sollte auch beachtet werden, dass auf Fedora (und möglicherweise anderen Derivaten: RHEL, CentOS usw.) die ursprüngliche tcpdump-Version gepatcht wurde , um eine separate Option -nnzum Entfernen von Portnummern einzuschließen. Aus der Manpage :

-n     Don't convert host addresses to names.   This  can  be  used  to
              avoid DNS lookups.

-nn    Don't convert protocol and port numbers etc. to names either.
heavyyd
quelle
Die Portnummer wird immer noch mit-n
misteryes 24.04.13
"Die Portnummer wird weiterhin mit -n in den Protokollnamen konvertiert" Nicht zum Beispiel mit tcpdump 4.1.1, das mit OS X Mountain Lion geliefert wird, oder mit tcpdump, das über den Git-Trunk von tcpdump.org erstellt wurde. In welcher Version von tcpdump wird die Konvertierung von Portnummern in Protokollnamen nicht unterdrückt?
5

Ich benutze -nnParameter.

-nn: Hostnamen oder Portnamen nicht auflösen.

Führen Sie es aus als:

tcpdump -nn 
ATMc
quelle
2

-nFunktioniert nur für Hostnamen, nicht jedoch für Portnummern. -nnmacht den Trick für beide. Dies führt tcpdump Version 4.5.1 unter Fedora 20 Gnu / Linux aus. Abgestimmte Antwort von @ATMc ist die einzig richtige. Leider kann ich es wegen des geringen Karmas weder unterstützen noch einen Kommentar darunter schreiben.

Adam Kurkiewicz
quelle
1

Ich denke, der beste Ansatz ist:

sudo tcpdump -ni any

Schritte zum Testen:

  1. Öffnen Sie eine Konsole und geben Sie Folgendes ein:

    sudo nc -l -p 6666
    
  2. Öffnen Sie eine andere Konsole und geben Sie Folgendes ein:

    sudo tcpdump -ni any
    

    Wenn die Ausgabe zu ausführlich ist, können Sie sie herausfiltern ( | grep -v "patter1n|pattern2")

  3. Öffnen Sie eine dritte Konsole und geben Sie Folgendes ein:

    telnet localhost 6666
    

Erwartete Ausgabe:

10:37:13.770997 IP 127.0.0.1.56920 > 127.0.0.1.443: Flags [S], seq 2822288041, win 43690, options [mss 65495,sackOK,TS val 1028779 ecr 0,nop,wscale 7], length 0

Wenn Sie verwenden, sehen sudo tcpdump -i anySie so etwas:

10:38:22.106022 IP localhost.56924 > localhost.https: Flags [S], seq 3147104744, win 43690, options [mss 65495,sackOK,TS val 1045863 ecr 0,nop,wscale 7], length 0
Javier
quelle
1
Das ist die gleiche Antwort wie bei der anderen - die -i anyist nicht erforderlich, wenn Sie die Adress- / Port-zu-Name-Konvertierung unterdrücken möchten, es kommt nur -ndarauf an.
-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'
anon
quelle
1
Ich verstehe es nicht
Pierre.Vriens
1
Die Frage lautet zwar "IP-Adresse und Portnummer anzeigen, aber nicht Hostname und Protokoll", aber ich bezweifle, dass dies "IP-Adresse und Portnummer anzeigen, aber keine der anderen Informationen" bedeutet. (Ich könnte mich irren, aber sonst scheint niemand die Frage so interpretiert zu haben, wie Sie es getan haben.) Ihre Antwort scheint sich auf zwei Teile zu beschränken: (1)  -nnAnzeigen von Diensten wie "http" und "dnp" als Port Nummer anstelle eines Namens (der in drei vorherigen Antworten angegeben wurde) und (2)  awkzum Wegwerfen von Daten zum Paketinhalt (was wahrscheinlich nicht erwünscht ist).
Scott