cómo hacer que tcpdump muestre la ip y el número de puerto pero no el nombre de host y el protocolo

42

Estoy usando tcpdump para algunas pruebas. Quiero ver la IP y el número de puerto, pero la salida de tcpdump es como

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

solo muestra el nombre de host y el protocolo para http, es fácil saber que es 80 pero para dnp tengo que buscar

Entonces, ¿es posible cómo hacer que tcpdump muestre la IP y el número de puerto pero no el nombre de host y el protocolo? De ser así, ¿cómo? Gracias

misteryes
fuente

Respuestas:

44

Añadir -na su tcpdumplínea de comando.

Desde la página de manual de tcpdump :

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

También debe tenerse en cuenta que en Fedora (y tal vez otros derivados: RHEL, CentOS, etc.) han parcheado la versión original de tcpdump para incluir una opción separada -nnpara eliminar los números de puerto. Desde la página del manual :

-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.
pesado
fuente
el número de puerto todavía se convierte al nombre del protocolo usando-n
misteryes
"el número de puerto todavía se convierte al nombre del protocolo usando -n" No con, por ejemplo, el tcpdump 4.1.1 que viene con OS X Mountain Lion o con tcpdump construido desde la parte superior del tronco tcpdump.org Git. ¿En qué versión de tcpdump está viendo -n no suprimir la conversión de números de puerto a nombres de protocolo?
5

Yo uso el -nnparámetro

-nn: No resuelva nombres de host o nombres de puerto.

Ejecútalo como:

tcpdump -nn 
ATMc
fuente
2

-nfunciona solo para nombres de host, pero no funciona para números de puerto. -nnhace el truco para ambos. Esto está ejecutando tcpdump versión 4.5.1 en Fedora 20 gnu / linux. La respuesta rechazada de @ATMc es la única correcta. Lamentablemente, no puedo votarlo ni escribir un comentario debajo debido al bajo nivel de karma.

Adam Kurkiewicz
fuente
1

Creo que el mejor enfoque es:

sudo tcpdump -ni any

Pasos para probar:

  1. Abra una consola y escriba:

    sudo nc -l -p 6666
    
  2. Abra otra consola y escriba:

    sudo tcpdump -ni any
    

    Si el resultado es demasiado detallado, puede filtrarlo ( | grep -v "patter1n|pattern2")

  3. Abra una tercera consola y escriba:

    telnet localhost 6666
    

Rendimiento esperado:

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

Si lo usa sudo tcpdump -i any, verá algo como esto:

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
fuente
1
Es lo mismo que la otra respuesta: -i anyno es necesario si desea suprimir la conversión de dirección / puerto a nombre, es lo único -nque importa.
-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'
luego
fuente
1
no lo entiendo
Pierre.Vriens
1
Si bien la pregunta dice "mostrar IP y número de puerto pero no nombre de host y protocolo", dudo que signifique "mostrar IP y número de puerto, pero no ninguna otra información". (Podría estar equivocado, pero nadie más parece haber interpretado la pregunta de la manera que lo hizo). Entonces su respuesta parece reducirse a dos partes: (1) usar  -nnpara mostrar servicios como "http" y "dnp" como puerto número en lugar de un nombre (que se ha presentado en tres respuestas anteriores) y (2) se usa  awkpara descartar datos sobre el contenido del paquete (que probablemente no se desee).
Scott