gpt4 book ai didi

linux - 如果使用相同 IP/端口的连接断开,则 Shell 脚本警报

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:00 24 4
gpt4 key购买 nike

我正在打开一个新问题,因为我的原始问题已得到解答,并且不想更改主题。

我正在尝试监控进入两个独立端口但具有相同 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 打印第 1 列,如果 1001.1001.1001.1001:200 在输出中不是警报的 2 倍,这意味着如果一个出现故障仍然警报 10.1001.1001.1001 丢失一个连接

并且即使 10.1001.1001.102:3000 在 netstat 输出中出现了 3 次,也没有准确地打印 4 次警报:

这是我当前的代码,除了 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

最佳答案

我对要求还不是很清楚。您将第一个字段称为 $process_name 但在您的 netstat 输出中它将是 addr:port 组合。 Linux 和 BSD 上的实际输出都将协议(protocol)作为第一个字段。此外,您似乎只在寻找已建立的连接,但您使用 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";
}

您可能必须调整读取循环中的正则表达式。我将使用 netstat -tpn 获取事件的 TCP 连接和进程名称,其输出如下所示:

tcp        0      0 172.30.252.100:39056    52.216.18.58:80         ESTABLISHED 2000/chrome         

关于linux - 如果使用相同 IP/端口的连接断开,则 Shell 脚本警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46574847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com