目 录
一、要求
二、解决方案
(一)解决思路
(二)方案
三、脚本程序实现
(一)脚本代码和解释
1、脚本代码
2、代码解释
(二)脚本验证
1、脚本编辑
2、给予执行权限
3、运行脚本,查看效果
四、扩展
一、要求
一般我们做linux系统中的应用程序,会用到不同的网络端口,有时候一个应用会用到很多端口。比如我们常见的流媒体平台,由于有很多用户会接入进来,所以,用到的接口成千上万都有可能。
那么,如何查看主机上的所有关心的端口的状态,以便进一步的进行分析、维护呢?
二、解决方案
(一)解决思路
通过查询指定的端口,若端口能够访问,或者能够跟端口建立连接,说明端口是处于开放的状态,否则,端口是关闭的。
(二)方案
(1)配置需要了解的所有端口;
(2) 遍历每个端口,查看端口是否可用?
(3)若端口可用,打印端口是开放的;否则,打印出信息:端口是关闭的。
三、脚本程序实现
直接把脚本写出来,分享给大家。
(一)脚本代码和解释
1、脚本代码
由于我的环境是centos7.9,编写如下bash代码,可以在centos7及其以后版本运行,如下:
#!/bin/bash
HOST=$1
PORTS="22 25 80 3306 8080 26088 26089"
for PORT in $PORTS; do(nc -z -w5 $HOST $PORT) &> /dev/nullif [ $? -eq 0 ]; thenecho "$PORT is opening....."elseecho "$PORT close"fi
done
2、代码解释
脚本的功能是检查指定主机上的多个端口是否开放。 解释如下:
(1)HOST=$1
这行代码将脚本的第一个参数($1)赋值给变量 HOST。当你运行这个脚本时,你需要提供一个主机名或 IP 地址作为参数。
(2)PORTS="22 25 80 3306 8080 26088 26089"
这行代码定义了一个字符串变量 PORTS,它包含了多个要用来检查的端口号,这些端口号由空格分隔。
(3)for PORT in $PORTS; do
这是一个 for 循环的开始,它会遍历 PORTS 变量中的每一个端口号,并将每个端口号临时赋值给变量 PORT。
(4)(nc -z -w5 $HOST $PORT) &> /dev/null
这行代码使用 nc(netcat)命令来尝试建立到指定主机和端口的连接。若本机没有安装netcat,可以使用yum install netcat 在centos中进行安装。
-z 参数告诉 nc 只在扫描端口时使用,而不发送任何数据。
-w5 参数设置了等待连接的超时时间为 5 秒。
&> /dev/null 将命令的标准输出和标准错误都重定向到 /dev/null,这意味着任何输出或错误信息都不会在终端上显示。
(5)if [ $? -eq 0 ]; then
这行代码检查上一个命令(即 nc 命令)的退出状态。$? 是一个特殊的变量,用于存储上一个命令的退出状态。如果 nc 命令成功连接到端口(即端口是开放的),它会以状态码 0 退出。
(6)echo "$PORT is opening....."
如果 nc 命令成功(即端口开放),这行代码会输出该端口的状态信息。
(7)else
这是 if 语句的 else 部分,它会在 nc 命令失败时执行。
(8)echo "$PORT close"
如果 nc 命令失败(即端口关闭),这行代码会输出该端口的状态信息。
(9)fi
这行代码标志着 if 语句的结束。
(10)done
这行代码标志着 for 循环的结束。
(二)脚本验证
1、脚本编辑
使用编辑器,比如vi,把代码输入进去;
保存这个脚本到一个文件中,比check_port.sh
2、给予执行权限
chmod +x w check_port.sh
3、运行脚本,查看效果
可以运行这个脚本来检查进程的运行情况,如下:
[root@localhost home]#
[root@localhost home]# ll
总用量 12
-rwxr-xr-x 1 root root 260 3月 3 13:24 check_port.sh
-rw-r--r-- 1 root root 76 3月 2 23:11 host.txt
-rwxr-xr-x 1 root root 547 3月 2 23:11 select_host.sh
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# sh check_port.sh localhost
22 is opening.....
25 is opening.....
80 close
3306 is opening.....
8080 close
26088 is opening.....
26089 is opening.....
[root@localhost home]#
四、扩展
在实际使用中, 可能还要查看其他端口,直接在脚本文件添加即可;若需要查看多个host的情况,可以修改脚本,或者直接在命令中添加多个host即可。