1、准备
我们可以使用下面命令关闭一个端口
sh
sudo iptables -A INPUT -p tcp --dport 端口号 -j DROP
我关闭的是22端口,各位可以关其它的或者打开其它端口测试,谨慎关闭22端口!不然就会像我下面一样握手超时😭😭😭
打开端口
sh
sudo iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
注意: 这些更改在当前会话中有效,重启后可能会丢失。要保存规则,可以使用iptables-save命令将规则导出到文件,并在系统启动时重新加载。
然后可以通过命令行的方式检查一下机器打开端口的状态
sh
nc -zvw5 1.1.1.12 22
其中:
-z
:表示扫描模式,只扫描端口而不发送任何数据。-v
:表示详细模式,会显示更多的扫描信息。-w5
:设置超时时间(wait timeout),后面的数字(在这个例子中是5)表示等待响应的最大秒数。如果在这个时间内没有收到响应,则认为连接失败。<hostname_or_IP>
(192.168.1.1):目标主机的主机名或IP地址。<port>
(22):要检查的端口号。
另外,如果你想要一个更详细的端口扫描报告,包括操作系统检测和服务版本检测,你可能需要使用更高级的端口扫描工具,如Nmap
。
创建测试文件
txt
cat <<EOF>> host.txt
1.1.1.12
1.1.1.13
1.1.1.14
EOF
2、编写代码
使用vim编写check_prot.sh文件
sh
vim check_prot.sh
然后话不多说,直接上代码
下面是一键批量检查主机端口的脚本完整代码,都写了注释
sh
#!/bin/bash
#auther:黑子哥呢?
#desc:一键批量检查端口
# 要检查的主机列表文件(格式:主机名或IP)
HOST_FILE="host.txt"
# 要检查的端口号
PORT=$1 # 例如,检查SSH端口(通常为22)
# 临时文件用于存储打开端口的主机
OPEN_PORTS_FILE=$(mktemp)
# 临时文件用于存储没有打开端口的主机
CLOSED_PORTS_FILE=$(mktemp)
# 检查主机列表文件是否存在
if [ ! -f "$HOST_FILE" ]; then
echo "主机列表文件 $HOST_FILE 不存在。"
exit 1
fi
# 检查端口是否打开的函数
check_port() {
local host="$1"
local port="$2"
# 尝试使用nc检查端口(如果nc不可用,可以尝试其他方法)
if nc -zw5 "$host" "$port" &>/dev/null; then
echo "$host" >> "$OPEN_PORTS_FILE"
else
echo "$host" >> "$CLOSED_PORTS_FILE"
fi
}
# 读取主机列表并检查端口
while IFS= read -r host; do
# 跳过空行
if [ -z "$host" ]; then
continue
fi
check_port "$host" "$PORT"
done < "$HOST_FILE"
# 输出打开端口的主机列表
if [ -s "$OPEN_PORTS_FILE" ]; then
echo "以下主机的 $PORT 端口是打开的:"
cat "$OPEN_PORTS_FILE"
fi
# 输出没有打开端口的主机列表
if [ -s "$CLOSED_PORTS_FILE" ]; then
echo "以下主机的 $PORT 端口是没有打开的:"
cat "$CLOSED_PORTS_FILE"
fi
# 清理临时文件
rm -f "$OPEN_PORTS_FILE" "$CLOSED_PORTS_FILE"
上面代码除了使用nc也可以使用其它工具,比如nmap,使用nmap可以参考这篇文章:nmap命令详细教程
比如下面的例子,我们只需要把nc那一行的命令替换成nmap即可
-
例子:
上面脚本中的代码
shnc -zw5 "$host" "$port" &>/dev/null
上面内容替换成下面的
shnmap -sT -p 22 --open -oN &>/dev/null 1.1.1.12 |grep -q 'open'
注意: 使用nmap之前请确保自己的机器上安装了nmap,如果没有请先安装
安装命令
shyum -y install nmap
运行脚本命令
sh
sh check_prot.sh 22
等待一会,就可以看见下面脚本运行结果