Shell编程

您所在的位置:网站首页 linux脚本监控本地端口 Shell编程

Shell编程

2024-06-01 04:42| 来源: 网络整理| 查看: 265

题目要求:使用Shell脚本监控检查某个TCP或UDP端口是否在监听 分析:

端口检测是系统资源检测经常遇到的,特别是在网络通讯情况下,端口状态的检测往往是很重要的。有时可能进程,CPU,内存等处于正常状态,但是端口处于异常状态,业务也是没有正常运行。 我们可以判断指定端口是否在监听。 首先使用 netstat -an 输出所有端口占用信息,然后通过 grep, awk,wc 过滤输出监听 TCP 端口的个数,第二条语句为输出 UDP 端口的监听个数,如果 TCP 与 UDP 端口监听都为 0,返回 0,否则返回监听的实际个数。

命令:

netstat: 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

参数:

-a 显示所有连线中的 Socket。 -n 直接使用 IP 地址,而不通过域名服务器。

解答: 命令行测试: [root@myhost ~]# netstat -an | egrep ":80" tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN tcp 0 0 x.x.x.x:53418 x.x.x.x:80 TIME_WAIT tcp 0 0 x.x.x.x:44562 x.x.x.x:80 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53613 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:68270 ESTABLISHED tcp 1 0 x.x.x.x:44188 x.x.x.x:8189 CLOSE_WAIT tcp 0 0 x.x.x.x:80 x.x.x.x:53517 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53714 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:64956 TIME_WAIT tcp 0 0 x.x.x.x:80 x.x.x.x:63251 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53915 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:56410 ESTABLISHED udp 0 0 x.x.x.x:80 0.0.0.0:* udp 0 0 127.0.0.1:187 0.0.0.0:* udp 0 0 0.0.0.0:187 0.0.0.0:* udp6 0 0 :::187 :::* [root@myhost ~]# netstat -an | egrep ":80" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN [root@myhost ~]# netstat -an | egrep ":80" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}'|wc -l 3 ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- [root@myhost ~]# netstat -an | egrep ":80" tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN tcp 0 0 x.x.x.x:53418 x.x.x.x:80 TIME_WAIT tcp 0 0 x.x.x.x:44562 x.x.x.x:80 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53613 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:68270 ESTABLISHED tcp 1 0 x.x.x.x:44188 x.x.x.x:8189 CLOSE_WAIT tcp 0 0 x.x.x.x:80 x.x.x.x:53517 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53714 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:64956 TIME_WAIT tcp 0 0 x.x.x.x:80 x.x.x.x:63251 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:53915 ESTABLISHED tcp 0 0 x.x.x.x:80 x.x.x.x:56410 ESTABLISHED udp 0 0 x.x.x.x:80 0.0.0.0:* udp 0 0 127.0.0.1:187 0.0.0.0:* udp 0 0 0.0.0.0:187 0.0.0.0:* udp6 0 0 :::187 :::* [root@myhost ~]# netstat -an | egrep ":80" | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' udp 0 0 x.x.x.x:80 0.0.0.0:* [root@myhost ~]# netstat -an | egrep ":80" | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}'|wc -l 1 脚本: #!/bin/sh source /etc/profile #define variable port=$1 TCPListeningnum=`netstat -an | egrep ":${port}" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' |wc -l` UDPListeningnum=`netstat -an | egrep ":${port}" | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' |wc -l` ((TotalListeningnum = TCPListeningnum + UDPListeningnum )) if [ ${TotalListeningnum} == 0 ]; then echo "the TotalListeningnum is 0" else echo "the TotalListeningnum is ${TotalListeningnum}" fi


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3