jak zrobić tcpdump, aby wyświetlał adres IP i numer portu, ale nie nazwę hosta i protokół

42

Używam tcpdump do niektórych testów Chcę zobaczyć adres IP i numer portu, ale dane wyjściowe tcpdump są jak

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

pokazuje tylko nazwę hosta i protokół http, łatwo jest wiedzieć, że to 80, ale dla dnp muszę szukać

więc czy można zrobić, aby tcpdump wyświetlał adres IP i numer portu, ale nie nazwę hosta i protokół, jeśli tak, to w jaki sposób? dzięki

tajemnice
źródło

Odpowiedzi:

44

Dodaj -ndo tcpdumplinii poleceń.

Z strony podręcznika tcpdump :

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

Należy również zauważyć, że na Fedorze (i być może innych pochodnych: RHEL, CentOS itp.) Załatali oryginalną wersję tcpdump, aby zawierała osobną opcję -nnusuwania numerów portów. Z strony podręcznika :

-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.
ciężki
źródło
numer portu jest nadal konwertowany na nazwę protokołu przy użyciu-n
misteryes 24.04.13
„numer portu jest nadal konwertowany na nazwę protokołu przy użyciu opcji -n” Nie dotyczy to na przykład tcpdump 4.1.1, który jest dostarczany z systemem OS X Mountain Lion lub z tcpdump zbudowanym ze szczytu tcpdump.org Git. Na jakiej wersji tcpdump widzisz -n nie tłumi konwersji numerów portów na nazwy protokołów?
5

Używam -nnparametru.

-nn: Nie rozwiązuj nazw hostów ani portów.

Uruchom jako:

tcpdump -nn 
ATMc
źródło
2

-ndziała tylko w przypadku nazw hostów, ale nie działa w przypadku numerów portów. -nnrobi lewę dla obu. To działa tcpdump w wersji 4.5.1 na Fedorze 20 gnu / linux. Zaliczona odpowiedź @ATMc jest jedyną poprawną. Niestety nie mogę ani go głosować, ani pisać poniżej komentarza z powodu niskiej karmy.

Adam Kurkiewicz
źródło
1

Myślę, że najlepszym podejściem jest:

sudo tcpdump -ni any

Kroki do przetestowania:

  1. Otwórz konsolę i wpisz:

    sudo nc -l -p 6666
    
  2. Otwórz kolejną konsolę i wpisz:

    sudo tcpdump -ni any
    

    Jeśli wyjście jest zbyt szczegółowe, możesz je odfiltrować ( | grep -v "patter1n|pattern2")

  3. Otwórz trzecią konsolę i wpisz:

    telnet localhost 6666
    

Oczekiwany wynik:

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

Jeśli użyjesz sudo tcpdump -i any, zobaczysz coś takiego:

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
źródło
1
To samo co druga odpowiedź - -i anynie jest to konieczne, jeśli chcesz ukryć konwersję adresu / portu do nazwy, tylko -nto się liczy.
-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'
zaraz
źródło
1
nie rozumiem
Pierre.Vriens
1
Choć kwestia mówi „Ip wyświetlacz i numer portu, ale nie nazwę hosta i protokół”, wątpię, że oznacza to „IP i numer portu wyświetlacza, ale nie każdy z pozostałych informacji”. (Mogę się mylić, ale wydaje się, że nikt inny nie zinterpretował pytania w taki sposób, jak ty.) Twoja odpowiedź sprowadza się więc do dwóch części: (1) użyj  -nndo wyświetlenia usług takich jak „http” i „dnp” jako portu numer zamiast nazwy (która była prezentowana w trzech poprzednich odpowiedziach) i (2) użyj,  awkaby wyrzucić dane na zawartość pakietu (co prawdopodobnie nie jest pożądane).
Scott