linux自动化一键批量检查主机端口

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即可

  • 例子:

    上面脚本中的代码

    sh 复制代码
    	nc -zw5 "$host" "$port" &>/dev/null

    上面内容替换成下面的

    sh 复制代码
    nmap -sT -p 22 --open -oN &>/dev/null 1.1.1.12 |grep -q 'open'

    注意: 使用nmap之前请确保自己的机器上安装了nmap,如果没有请先安装

    安装命令

    sh 复制代码
    yum -y install nmap

运行脚本命令

sh 复制代码
sh check_prot.sh 22

等待一会,就可以看见下面脚本运行结果

相关推荐
水银嘻嘻3 小时前
web 自动化之 KDT 关键字驱动详解
运维·自动化
Vone_663 小时前
node.js 邮箱验证服务器搭建
运维·服务器·node.js
丢丢丢丢丢丢~3 小时前
apache2的默认html修改
linux·运维·服务器
wusam4 小时前
Linux系统管理与编程20:Apache
linux·运维·服务器·apache·shell编程
我不想当小卡拉米4 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
引量AI4 小时前
TikTok矩阵运营干货:从0到1打造爆款矩阵
人工智能·矩阵·自动化·tiktok矩阵·海外社媒
ChironW4 小时前
Ubuntu 24.04 LTS系统上配置国内时间同步
linux·运维·服务器·ubuntu
TPBoreas4 小时前
排查服务器内存空间预警思路
运维·服务器
yayaer24 小时前
GOOSE 协议中MAC配置
服务器·网络·goose
苏生要努力5 小时前
第九届御网杯网络安全大赛初赛WP
linux·python·网络安全