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

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

相关推荐
小草cys6 小时前
在 openEuler 上安装 DDE 图形桌面环境(适用于华为鲲鹏服务器/PC)
运维·服务器
天才奇男子14 小时前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
学嵌入式的小杨同学14 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
酥暮沐14 小时前
iscsi部署网络存储
linux·网络·存储·iscsi
❀͜͡傀儡师15 小时前
centos 7部署dns服务器
linux·服务器·centos·dns
Dying.Light15 小时前
Linux部署问题
linux·运维·服务器
S190115 小时前
Linux的常用指令
linux·运维·服务器
小义_15 小时前
【RH134知识点问答题】第7章 管理基本存储
linux·运维·服务器
梁洪飞16 小时前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
_运维那些事儿16 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算