Pare de gravar em um arquivo de captura depois que ele atinge um tamanho específico

4

Gostaria de monitorar meu tráfego de rede de uma interface específica para o arquivo.

Depois, gostaria de interromper a interface se o tráfego contasse mais de 60 MB.

Existe uma maneira possível de fazer isso?

    
por linuscl 01.08.2015 / 14:07

2 respostas

5

dumpcap , o programa de captura de tráfego de baixo nível de Wireshark , pode ser instruído para parar de capturar após certas condições com a opção -a . Você pode parar de capturar depois de escrever 60MB. Isso não é o mesmo que medir tráfego, pois depende da codificação do arquivo, mas deve estar perto o suficiente para a maioria dos propósitos (e de qualquer maneira o tráfego exato depende de qual nível de protocolo você mede - Ethernet, IP, TCP, aplicação ,…).

dumpcap -i eth0 -a filesize:61440 -w capture.dump
    
por 01.08.2015 / 22:15
1

Aqui está um realmente método sujo que você pode usar com Perl e o comando system de perl. tcpdump irá despejar pacotes inteiros -s 0 na interface wlan0 -i wlan0 para o arquivo tcpdump.pcap . No meu exemplo, ele interromperá todos os processos e encerrará a interface depois que o arquivo exceder 1 MB. Mude para atender às suas necessidades. Execute-o com sudo . A instrução sleep pausa o programa para dar a tcpdump a chance de acionar.

Eu estou no Linux Mint, então os caminhos do programa e nomes de interface podem ser diferentes no seu sistema.

#!/usr/bin/perl
use warnings;
use strict;

my $file = 'tcpdump.pcap';
my $int = 'wlan0';
my $bytes = 1000000;

my $pid = open my $pipe, 
  "| /usr/sbin/tcpdump -n -i $int -s 0 -w $file &",
  or die $!;

sleep 3;

while (1){

    if (-s $file > $bytes){
        print "Killing PID $pid, tcpdump and disabling $int\n";
        system "kill -9 $pid; killall tcpdump";
        system "/sbin/ifconfig $int down";
        exit;
    }
}
    
por 01.08.2015 / 16:36