Como capturar a saída do tcpdump

4

Eu gostaria de capturar a saída do tcpdump e usá-la como entrada para um segundo comando. A propósito, eu não quero usar o formato pcap!

Eu tentei

sudo tcpdump -q ip > ./out.txt

Quando vi o arquivo, vi o STDOUT inteiro ser gravado no arquivo o tempo todo, mas esperava que o arquivo fosse sobrescrito apenas pelo novo conteúdo. Todos os STDOUT são armazenados em buffer ou apagados quando gravados no terminal?

  • Existe uma maneira de ler somente as atualizações parciais do STDOUT?
  • Como posso redirecionar a saída continuamente do tcpdump para outro cmd?

Isso funciona?

sudo tcpdump -q ip | my_command
    
por Jay 12.06.2015 / 13:39

1 resposta

2

Para substituir sempre o arquivo por cada nova linha tcpdump :

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

Para usar a saída para outro comando, por exemplo, awk

  • $3 = apenas a terceira coluna

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • Filtre por tcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • Ou uma combinação:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

de man tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat
    
por A.B. 12.06.2015 / 13:55