捕获文件达到特定大小后停止写入

捕获文件达到特定大小后停止写入

我想监控文件特定接口的网络流量。

然后,如果总流量超过 60mb,我想停止该接口。

有没有可能的方法来做到这一点?

答案1

dumpcap,低层流量捕获程序Wireshark,可以使用该选项指示在某些条件后停止捕获-a。写入 60MB 后即可停止捕获。这与测量流量不同,因为它取决于文件编码,但对于大多数用途来说,它应该足够接近(无论如何,确切的流量取决于您测量的协议级别 - 以太网、IP、TCP、应用程序) ,……)。

dumpcap -i eth0 -a filesize:61440 -w capture.dump

答案2

这是一个真的dirty 方法可以与 Perl 和 perlsystem命令一起使用。tcpdump将把-s 0接口 wlan0 上的整个数据包转储-i wlan0到文件tcpdump.pcap。在我的示例中,它会在文件超过 1MB 后停止所有进程并关闭界面。更改以满足您的需求。运行它sudo。该sleep语句暂停程序以便有tcpdump机会启动。

我使用的是 Linux Mint,因此您的系统上的程序路径和接口名称可能有所不同。

#!/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;
    }
}

相关内容