Saída de pipe do tcpdump com opção de buffer -B

1

Estou processando a saída do tcpdump no Ubuntu 16.04LTS usando o seguinte comando:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py

Isso funciona, mas infelizmente, há muitos pacotes para lidar com os scripts que eu quero escrever, então eu gostaria de remover os pacotes que estão vindo do mesmo endereço IP para uma vez a cada 100ms ou mais. Eu não vejo uma maneira de fazer isso no tcpdump manpage. Existe uma maneira de fazer isso?

Eu vi que você pode ajustar o tamanho do buffer usando -B , mas quando eu tento executar o seguinte com um script python de teste (que simplesmente gera o que lê no stdin):

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py

Eu não recebo nada além de linhas em branco para o terminal. Eu não entendo como o buffer funciona, porque se eu não canalizar para um script, a saída para o terminal funciona bem usando:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l

(script Python):

import sys

while True:
    print sys.stdin.readline()

Alguém pode explicar se existe uma maneira de efetivamente limitar o número de pacotes por segundo de cada endereço IP que é gerado, e se não, como a opção -B funciona, e se ele pode ser canalizado para um script python como isso?

    
por JBaczuk 14.04.2017 / 00:48

1 resposta

0

Após tentativa e erro, descobri que, se eu tentasse algo menor que 256 na opção -B, ele falharia. Então, caso isso ajude alguém, use pelo menos -B 256

    
por 21.04.2017 / 04:20