仅使用Netstat

时间:2015-09-03 17:43:08

标签: windows perl shell batch-file netstat

我正在尝试为Windows创建一个脚本,它只计算系统上的Established,Time_Wait和Closed_Wait连接数,并在命令提示符下打印它们。我已经制作了一个可以在Linux机器上执行此操作的shell脚本,但是shell脚本无法在Windows中运行。我试图使用.bat来执行脚本但是没有用(可能是因为它仍然是Windows中的shell脚本:/)它必须只显示Established,Time_Wait和Closed_Wait的原因是因为脚本正在由监控程序使用,如果出现任何其他连接类型,将失败。谁能提出建议?谢谢!

1 个答案:

答案 0 :(得分:1)

以下(应该)可以在不对* nix和Windows进行任何更改的情况下工作。我在Ubuntu w / Perl v.5.18.0,Linux Mint w / Perl v5.22.0和Win2k8R2(w / Strawberry Perl v5.8.8)上进行了测试。

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

my @stat = split '\n', `netstat -nat`;

my @wanted = qw(
                ESTABLISHED
                TIME_WAIT
                CLOSED_WAIT
                SYN_SENT
                SYN_RECV
            );

my %data = map {$_ => 0} @wanted;

for (@stat){
    s/^\s+//;

    my $status;

    if ($^O eq 'MSWin32'){
        $status = (split)[3];
    }
    else {
        $status = (split)[5];
    }

    next if ! $status;

    $data{$status}++ if defined $data{$status};
}

print "$data{$_}\n" for @wanted;