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

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

相关推荐
GeW16 小时前
新质生产力路线图Linux、数据库、国产化替代一次讲透
linux
aningx18 小时前
cachyos 从 GRUB 切换到 rEFInd
linux
第404号工位19 小时前
40块钱二手瘦客户端,如何跑满家庭物联网中枢?(拒绝Docker爆盘实录)
linux·架构·node.js
对象存储与RustFS19 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
骑着蜗牛撵大象32721 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
众壹新能源科技21 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
..Dauntless..21 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
裕晟资质规划21 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
QMCY_jason21 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器
重生之小比特21 小时前
【Linux系统】12 进程程序替换 自定义Shell 命令行解释器
linux·运维·服务器