como fazer o tcpdump exibir o número do ip e da porta, mas não o nome do host e o protocolo

42

Estou usando o tcpdump para alguns testes. Quero ver o número do IP e da porta, mas a saída do tcpdump é como

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

mostra apenas o nome do host e o protocolo para http, é fácil saber que é 80, mas para dnp eu tenho que pesquisar

então é possível como fazer com que o tcpdump exiba o número de ip e da porta, mas não o nome do host e o protocolo, se sim, como? obrigado

misteryes
fonte

Respostas:

44

Adicione -nà sua tcpdumplinha de comando.

Na página de manual do tcpdump :

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

Também deve ser observado que no Fedora (e talvez outros derivados: RHEL, CentOS, etc.) eles corrigiram a versão original do tcpdump para incluir uma opção separada -nnpara remover os números de porta. Na página de 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
fonte
número da porta é ainda convertido em nome do protocolo utilizando-n
misteryes
"o número da porta ainda é convertido para o nome do protocolo usando -n" Não, por exemplo, o tcpdump 4.1.1 que acompanha o OS X Mountain Lion ou o tcpdump criado na parte superior do tronco tcpdump.org Git. Em qual versão do tcpdump você está vendo -n não suprime a conversão de números de porta em nomes de protocolo?
5

Eu uso -nnparâmetro.

-nn: Não resolva nomes de host ou nomes de portas.

Execute-o como:

tcpdump -nn 
ATMc
fonte
2

-nfunciona apenas para nomes de host, mas não para números de porta. -nnfaz o truque para ambos. Isso está executando a versão 4.5.1 do tcpdump no Fedora 20 gnu / linux. Resposta reduzida de @ATMc é a única correta. Infelizmente, não posso votar novamente nem escrever um comentário abaixo por causa do baixo carma.

Adam Kurkiewicz
fonte
1

Eu acho que a melhor abordagem é:

sudo tcpdump -ni any

Passos para testar:

  1. Abra um console e digite:

    sudo nc -l -p 6666
    
  2. Abra outro console e digite:

    sudo tcpdump -ni any
    

    Se a saída for muito detalhada, você pode filtrá-la ( | grep -v "patter1n|pattern2")

  3. Abra um terceiro console e digite:

    telnet localhost 6666
    

Saída esperada:

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

Se você usar sudo tcpdump -i any, verá algo parecido com isto:

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
fonte
1
É o mesmo que a outra resposta - -i anynão é necessária se você deseja suprimir a conversão de endereço / porta para nome, é exatamente -nisso que importa.
-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'
anon
fonte
1
Eu não entendi
Pierre.Vriens
1
Enquanto a pergunta diz "exibir número de ip e porta, mas não nome e host do protocolo", duvido que signifique "exibir número de ip e porta, mas nenhuma outra informação". (Eu posso estar errado, mas parece que ninguém mais interpretou a pergunta da maneira que você fez.) Portanto, sua resposta se resume a duas partes: (1) use  -nnpara exibir serviços como "http" e "dnp" como uma porta número em vez de um nome (que foi apresentado em três respostas anteriores) e (2) use  awkpara descartar dados sobre o conteúdo do pacote (o que provavelmente não é desejado).
Scott