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