linux - shell脚本监视具有相同IP的多个连接

标签 linux shell netstat

我正在尝试监视进入 Linux 服务器的连接,这些连接具有相同的 IP 连接到相同的端口。是否可以监控一个特定的ip地址,只有当它不存在2次时才发出警报?

例子:

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.101 或 101.101.102 都没有退出 2 次,我想发出警报。

我的脚本:

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

最佳答案

以下脚本可以帮助您。

netstat -an | awk -v s1="\"" '
function check(ip,count,email_id){
  if(count<2){
    system("echo " s1 "IP " ip " 2 count not found." s1 " |  mailx -s " s1 " Alert email IP " ip " 2 times occurence not found." s1 FS email_id)
}
  else{
    print ip " is running fine."}
}
/101.101.101.101/{
  count1++
}
/101.101.101.102/{
  count2++
}
END{
  check(101.101.101.101,count1,"test@chumma.com");
  check(101.101.101.102,count2,"test@chumma.com")
}
' 

解释:所以它将运行命令 netstat -an并将其标准输出作为 awk 的标准输入命令。在 awk命令,如果你看到我创建了一个 function名为 check ,因此您可以在 awk 的 END block 中为任何 IP 调用它(我们必须在读取标准输入时检查它的计数)您可以使用传递给它的属性调用此函数 eg--> check(IP,count_variable,your_email_where_you_want_to_alert) .如果一切正常,它应该打印(意味着该变量的计数大于或等于 2,如果您只想要计数 2,则将我的代码的条件更改为 count==2 上面的函数)否则它将发送电子邮件到您将提供给的 id功能。

关于linux - shell脚本监视具有相同IP的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556994/

相关文章:

linux - 键盘快捷键命令究竟是如何处理的?

linux - 通过 linux 路由表 Ping 不工作[或]这是怎么回事?

linux - Cronjob 未运行,尝试将字符串回显到文件中

linux - netstat 返回奇怪的名称,我希望在其中看到端口号(例如 mcreport(8003 mulberry 报告服务)和 pago-services2(30002))

c++ - Accept() 在重复连接尝试时无限期地阻塞

linux - 无法在 shell 提示符下复制多行 curl 命令

linux - 如何在 Linux 中使用 awk 启用统计功能

java - 无法使用 Jsch 执行 .sh 脚本

c - execvp() 在我的 shell 中不工作

bash - 如果文件中不包含字符串,如何将其附加到文件?