实用脚本能批量扫描吗?

wen 实用脚本 8

本文目录导读:

实用脚本能批量扫描吗?

  1. 使用 nmap 进行批量扫描(最强大、最常用)
  2. 针对特定服务的批量检测脚本
  3. 使用 masscan (极速端口扫描)
  4. 高级:使用 Python 脚本实现灵活的批量扫描
  5. 注意事项和安全考量
  6. 推荐实践流程

当然可以!批量扫描是网络管理和安全测试中的常见需求,我必须先强调:请只在获得明确授权的网络和系统上使用扫描工具,未经授权的扫描是非法和不道德的行为。

根据你的具体需求(如扫描端口、检测服务、发现存活主机或寻找漏洞),有几种不同的实用脚本和工具可以实现批量扫描,以下是一些常见的方法和示例脚本:

使用 nmap 进行批量扫描(最强大、最常用)

nmap 本身就支持通过多种方式批量处理目标,结合简单的 shell 脚本可以非常灵活。

核心方法: 将 IP 地址或网段列表放入一个文本文件,然后用 -iL 参数导入。

示例脚本 (batch_nmap_scan.sh):

#!/bin/bash
# 定义输入文件(每行一个IP、网段或主机名)
INPUT_FILE="targets.txt"
# 定义输出目录
OUTPUT_DIR="nmap_results"
# 定义扫描选项(-sS 半开扫描,-sV 版本检测,-O 系统检测)
SCAN_OPTIONS="-sS -sV -O -T4"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "错误:输入文件 $INPUT_FILE 不存在!"
    exit 1
fi
# 逐行读取目标并执行扫描
while IFS= read -r target; do
    # 跳过空行和注释行(以#开头)
    if [[ -z "$target" || "$target" == \#* ]]; then
        continue
    fi
    # 生成安全的文件名(替换斜杠和冒号等特殊字符)
    safe_name=$(echo "$target" | sed 's/[\/:]/_/g')
    output_file="${OUTPUT_DIR}/${safe_name}_scan.xml"
    echo "正在扫描: $target"
    # 执行 nmap 扫描,输出为 XML 格式(方便自动化解析)
    nmap $SCAN_OPTIONS -oX "$output_file" "$target"
    # 可选:同时输出为文本格式供快速查看
    # nmap $SCAN_OPTIONS -oN "${OUTPUT_DIR}/${safe_name}_scan.txt" "$target"
    echo "扫描完成: $target -> $output_file"
    echo "------------------------"
done < "$INPUT_FILE"
echo "所有批量扫描任务完成!结果保存在 $OUTPUT_DIR 目录。"

targets.txt 文件示例:

# 这是注释行
192.168.1.1
192.168.1.0/24
scanme.nmap.org
10.0.0.1-10.0.0.100

针对特定服务的批量检测脚本

如果你只想快速检查某个端口是否开放(SSH 22端口),可以使用更轻量的工具。

使用 nc (netcat) 批量检测端口:

#!/bin/bash
# 批量检测多个主机的特定端口是否开放
TARGETS="192.168.1.1 192.168.1.2 192.168.1.3"
PORT=22
for ip in $TARGETS; do
    # -z 表示零I/O模式扫描,-w 2 设置超时2秒
    nc -z -w 2 $ip $PORT &>/dev/null
    if [ $? -eq 0 ]; then
        echo "$ip:$PORT 开放"
    else
        echo "$ip:$PORT 关闭或不可达"
    fi
done

使用 masscan (极速端口扫描)

masscan 是异步的端口扫描器,速度极快,适合扫描大规模 IP 段。

# 扫描整个 B 类网段(10.0.0.0/16)的80和443端口,速率10万包/秒
masscan 10.0.0.0/16 -p80,443 --rate=100000 -oJ masscan_results.json
# 从文件读取目标列表批量扫描
masscan -iL targets.txt -p1-65535 --rate=50000 -oG masscan_results.gnmap

高级:使用 Python 脚本实现灵活的批量扫描

Python 的 python-nmap 库可以让你编写更复杂的扫描逻辑。

Python 批量扫描脚本示例:

#!/usr/bin/env python3
import nmap
import json
import sys
def batch_scan(target_file, output_file):
    nm = nmap.PortScanner()
    results = {}
    try:
        with open(target_file, 'r') as f:
            targets = [line.strip() for line in f if line.strip()]
    except FileNotFoundError:
        print(f"错误:文件 {target_file} 未找到")
        sys.exit(1)
    for target in targets:
        print(f"正在扫描: {target}")
        try:
            # 设置扫描参数,-sV 版本检测,--script vulners 漏洞检测(需要安装相应脚本)
            nm.scan(target, arguments='-sV -T4')
            results[target] = nm[target]
        except Exception as e:
            print(f"扫描 {target} 时出错: {e}")
            results[target] = {"error": str(e)}
    # 保存结果为 JSON 格式
    with open(output_file, 'w') as f:
        json.dump(results, f, indent=2)
    print(f"批量扫描完成,结果已保存到 {output_file}")
if __name__ == "__main__":
    # 使用方法:python script.py targets.txt results.json
    if len(sys.argv) != 3:
        print("用法: python batch_scan.py <目标文件> <输出文件>")
        sys.exit(1)
    batch_scan(sys.argv[1], sys.argv[2])

注意事项和安全考量

  1. 授权至关重要:在开始扫描前,务必获得网络所有者的书面授权,即使是自己的网络,也要注意不要干扰正常业务。
  2. 扫描速度:设置合理的扫描速率(-T 参数或 --rate),过快的扫描可能被误判为 DDoS 攻击或导致网络设备过载。
  3. 法律风险:许多国家和地区的法律规定,未经授权的网络扫描属于违法行为。
  4. 结果处理:批量扫描会产生大量数据,建议使用结构化的输出格式(XML、JSON)并配合解析工具。
  5. 注意事项:某些 IDS/IPS 系统可能检测到扫描行为并触发警报。

推荐实践流程

  1. 先小规模测试(1-2 个 IP),确认扫描参数正确。
  2. 使用 --reason 参数查看端口状态原因,帮助分析结果。
  3. 对于扫描结果,使用 grepawk 或专门的 NSE 脚本进行二次分析。
  4. 考虑使用 dmitryrecon-ng 等更专业的侦察框架。

如果你能提供更具体的需求(是扫描内网所有存活主机?还是检测特定漏洞?),我可以为你提供更精准的脚本建议。能力越大,责任越大。

抱歉,评论功能暂时关闭!