我打开了一个新的问题,因为我原来的问题已经回答了,我不想改变话题。
我正在尝试监控进入两个独立端口但具有相同IP的多个连接
示例
netstat -an |grep 000
101.101.101.101:2000 ESTABLISHED
101.101.101.101:2000 ESTABLISHED
101.101.101.102:3000 ESTABLISHED
101.101.101.102:3000 ESTABLISHED
101.101.101.102:3000 ESTABLISHED
101.101.101.102:3000 ESTABLISHED我尝试做的是使用nestat和awk来打印第一列,如果1001.1001.1001.1001:200没有出现在输出中2次,这意味着如果出现故障,仍然会提示10.1001.1001.1001缺少一个连接
此外,如果10.1001.1001.102:3000没有打印4次警告,即使它在netstat输出中存在3次:
这是我当前的代码,除了IP只存在一次,警报不会失败之外,所有代码都很好:
connections=('101.101.101.101' '101.101.101.102')
running=( $(netstat -an |grep 000 |awk '{print $1}') )
non_running=()
for process_name in ${connections[@]}; do
if [[ "${running[*]}" == *$process_name* ]]; then
echo "$process_name is running"
else
echo "$process_name is not running"
fi
done发布于 2017-10-05 08:30:43
我仍然不太清楚这些要求。您将第一个字段称为$process_name,但在netstat输出中,它将是addr:port组合。Linux和BSD上的实际输出都将协议作为第一个字段。此外,您似乎只寻找已建立的连接,但您使用的netstat的-a开关,使其打印侦听套接字,也?
因此,假设您的输出类似于上面所示,我将在Perl中这样做:
#!/usr/bin/perl
use strict;
use warnings;
my %minimum = (
'101.101.101.101:2000' => 2,
'101.101.101.102:3000' => 5,
);
my %count;
open my $fh, '-|', 'netstat -an' or die "could not run netstat: $!";
while(<$fh>) {
next unless /^([0-9.]+:\d+000) /;
$count{$1}++;
}
close $fh;
while(my ($ip_port, $min) = each %minimum) {
$count{$ip_port} ||= 0;
next if $count{$ip_port} >= $min;
print "$ip_port: need $min connections, found only $count{$ip_port}\n";
}您可能需要在read循环中调整正则表达式。我将使用netstat -tpn来获取活动的TCP连接和进程名称,其输出如下所示:
tcp 0 0 172.30.252.100:39056 52.216.18.58:80 ESTABLISHED 2000/chrome https://stackoverflow.com/questions/46574847
复制相似问题