mcpField
N
nmap

nmap

github.com/brownfinesecurity安全875150 次安装21 周前更新
代码仓库

关于 nmap

nmap 是面向网络侦察与端口扫描的操作指南技能,提供扫描流程、参数选择、结果解析和输出管理建议,适用于授权的安全测试。其默认流程先发现所有开放端口,再对开放端口进行服务检测。

主要功能

  1. 01提供两阶段端口与服务扫描流程
  2. 02涵盖多种扫描类型与参数
  3. 03指导解析端口、服务和脚本结果
  4. 04将结果保存为三种输出格式
  5. 05说明扫描范围、时序与授权注意事项

适用场景

  1. 01对获准的单台主机或网段进行侦察
  2. 02发现开放端口并识别服务版本
  3. 03检查 IoT 设备相关网络服务
  4. 04整理扫描结果供后续分析

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/brownfinesecurity/iothackbot --skill nmap

安装后在 Claude Code 中输入/nmap确认已加载。

详细介绍

Nmap 扫描 - 专业网络侦察

你正在协助用户使用 nmap 进行专业网络侦察和端口扫描。本技能提供各种扫描类型、输出格式和结果分析方面的指导。

输出目录

目录结构
nmap-output/
├── nmap-portscan.nmap      # Initial fast port discovery
├── nmap-portscan.xml
├── nmap-portscan.gnmap
├── nmap-services.nmap      # Detailed service detection on open ports
├── nmap-services.xml
└── nmap-services.gnmap

重要:始终将 nmap 输出保存到有组织的目录结构中。默认使用 ./nmap-output/,或指定自定义目录。

默认扫描策略

重要:除非用户明确要求使用其他扫描类型,否则始终采用以下两阶段方法:

阶段 1:快速端口发现(Root SYN 扫描)
sudo nmap -p- <target> -oA <output-dir>/nmap-portscan
  • 为什么使用 sudo:以 root 身份运行可启用快速 SYN 扫描(隐式使用 -sS)
  • 为什么使用 -p-:快速扫描全部 65535 个端口
  • 耗时:SYN 扫描通常需要 1-3 分钟
  • 输出:所有开放端口的列表

主机宕机检测: 如果扫描输出包含“Note: Host seems down”,请自动使用以下参数重试:

sudo nmap -p- -Pn <target> -oA <output-dir>/nmap-portscan
  • -Pn:跳过主机发现,将主机视为在线
  • 在防火墙阻止 ping 探测时使用
阶段 2:针对性服务检测

阶段 1 完成后,解析开放端口并运行:

nmap -p <OPEN_PORT_LIST> -sV -sC <target> -oA <output-dir>/nmap-services
  • -p <OPEN_PORT_LIST>:仅扫描发现为开放状态的端口(例如,-p 23,80,443,554,8000)
  • -sV:检测服务版本
  • -sC:运行默认 NSE 脚本以进行额外枚举
  • 耗时:通常为 1-3 分钟,因为只扫描已知的开放端口
为什么采用这种策略?
  1. 速度:快速 SYN 扫描可在 1-3 分钟内找到所有开放端口
  2. 全面性:覆盖全部 65535 个端口,而不只是前 1000 个
  3. 效率:仅对确认开放的端口进行服务检测
  4. 准确性:两阶段方法可减少假阴性
解析开放端口

阶段 1 完成后,使用以下方式提取开放端口:

# Extract open ports from .gnmap file
grep "Ports:" <output-dir>/nmap-portscan.gnmap | sed 's/.*Ports: //' | tr ',' '\n' | grep '/open/' | cut -d'/' -f1 | tr -d ' ' | tr '\n' ',' | sed 's/,$//'

也可以从 .nmap 文件中解析(与 STATE 列精确匹配,因此会排除 open|filtered 端口):

awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' <output-dir>/nmap-portscan.nmap

实施工作流

调用 nmap-scan 技能时:

  1. 创建输出目录

    OUTPUT_DIR="./nmap-output"
    mkdir -p "$OUTPUT_DIR"
    
  2. 运行阶段 1:快速端口发现

    sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan"
    
  3. 检查是否出现“Host seems down”错误

    if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
        echo "Host appears down, retrying with -Pn flag..."
        sudo nmap -p- -Pn <target> -oA "$OUTPUT_DIR/nmap-portscan"
    fi
    
  4. 从结果中解析开放端口

    OPEN_PORTS=$(awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' "$OUTPUT_DIR/nmap-portscan.nmap")
    
  5. 运行阶段 2:检测开放端口上的服务

    if [ -n "$OPEN_PORTS" ]; then
        nmap -p "$OPEN_PORTS" -sV -sC <target> -oA "$OUTPUT_DIR/nmap-services"
    else
        echo "No open ports found, skipping service detection."
    fi
    
  6. 报告结果位置

    echo "Scan complete. Results saved to: $OUTPUT_DIR"
    

扫描类型

快速扫描(前 1000 个端口)

用于初步侦察、时间有限时,或仅在用户明确要求快速扫描而非默认两阶段策略时使用:

nmap -sV -sC <target> -oA <output-prefix>
  • -sV:检测服务版本
  • -sC:运行默认 NSE 脚本
  • -oA:以所有格式输出(普通、XML、grepable)
  • 扫描最常见的前 1000 个端口
  • 典型耗时:1-3 分钟
  • 局限性:可能会漏掉运行在非标准端口上的服务
全面扫描(所有端口)

需要检查所有端口时,用于进行全面评估:

nmap -sV -sC -p- <target> -oA <output-prefix>
  • -p-:扫描全部 65535 个端口
  • 耗时明显更长(视目标而定,为 5-30 分钟以上)
  • 仅在需要全面覆盖时使用
隐蔽 SYN 扫描

尝试避免被检测时使用(需要 root/sudo):

sudo nmap -sS -sV -sC <target> -oA <output-prefix>
  • -sS:隐蔽 SYN 扫描(不完成 TCP 握手)
  • 被目标记录的可能性较低
  • 需要 root 权限
UDP 扫描

需要枚举 UDP 服务时使用:

sudo nmap -sU --top-ports 100 <target> -oA <output-prefix>
  • -sU:UDP 扫描
  • --top-ports 100:扫描前 100 个 UDP 端口(UDP 扫描速度较慢)
  • 常见 UDP 服务:DNS (53)、SNMP (161)、DHCP (67/68)
  • 速度很慢 - 使用 top-ports 限制扫描范围
激进扫描

用于最大限度地收集信息(噪声较大):

nmap -A -T4 <target> -oA <output-prefix>
  • -A:启用操作系统检测、版本检测、脚本扫描和 traceroute
  • -T4:激进计时模板(速度更快,但更容易被检测到)
  • 噪声很大 - 会被 IDS/IPS 检测到
  • 仅在获得授权后使用
漏洞扫描

用于检查已知漏洞:

nmap -sV --script vuln <target> -oA <output-prefix>
  • --script vuln:运行 NSE 漏洞检测脚本
  • 检查常见 CVE 和配置错误
  • 可能产生较大噪声并触发警报
OS 检测

用于识别操作系统:

sudo nmap -O <target> -oA <output-prefix>
  • -O:启用 OS 检测
  • 需要 root 权限
  • 使用 TCP/IP 协议栈指纹识别

扫描工作流

默认工作流(两阶段策略)

按照上文“默认扫描策略”和“实施工作流”部分,运行阶段 1(端口发现)和阶段 2(服务检测)。然后进行分析:

阶段 3:分析

  • 查看服务检测结果,确定:
    • 正在运行哪些服务?
    • 检测到哪些版本?
    • 是否存在值得关注的服务(Web、SSH、数据库、IoT 协议)?
    • NSE 脚本是否发现任何问题?
其他目标扫描(可选)

根据服务检测结果,运行专用扫描:

如果发现 Web 服务(80、443、8080 等):

nmap -p 80,443,8080,8443 --script http-* <target> -oA <output-dir>/nmap-web

如果发现 SSH:

nmap -p 22 --script ssh-* <target> -oA <output-dir>/nmap-ssh

如果发现 RTSP(554):

nmap -p 554 --script rtsp-* <target> -oA <output-dir>/nmap-rtsp

如果怀疑存在 ONVIF/摄像头:

nmap -p 80,554,8000,8080 --script http-methods,http-headers <target> -oA <output-dir>/nmap-onvif

输出管理

输出格式

始终使用 -oA <prefix> 生成全部三种格式:

  • .nmap - 面向用户的普通格式
  • .xml - 用于解析/导入工具的 XML 格式
  • .gnmap - 用于命令行处理的可 grep 格式

时间与性能

时间模板

使用 -T<0-5> 控制扫描速度:

  • -T0(Paranoid):极慢,用于规避 IDS
  • -T1(Sneaky):非常慢,用于规避 IDS
  • -T2(Polite):较慢,占用带宽较少
  • -T3(Normal):默认,速度均衡
  • -T4(Aggressive):快速,推荐用于现代网络
  • -T5(Insane):非常快,可能遗漏结果

默认:使用 -T3 或省略(默认值为 T3) 快速扫描:在速度很重要且网络能够承受时使用 -T4 隐蔽扫描:使用 -T1 或 -T2 规避检测

超时注意事项
  • 阶段 1 端口发现(sudo nmap -p-):超时设为 180-300 秒(3-5 分钟)
  • 阶段 2 服务检测(nmap -p -sV -sC):超时设为 120-180 秒(2-3 分钟)
  • UDP 扫描:超时设为 600 秒以上(非常慢)

网络范围

单台主机
nmap <ip-address>
CIDR 表示法
nmap 192.168.1.0/24
IP 范围
nmap 192.168.1.1-254
多台主机
nmap 192.168.1.1 192.168.1.10 192.168.1.100
排除主机
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.254

NSE 脚本

常见脚本类别
# Authentication scripts
nmap --script auth <target>

# Brute force scripts
nmap --script brute <target>

# Default safe scripts
nmap -sC <target>  # equivalent to --script default

# Discovery scripts
nmap --script discovery <target>

# Vulnerability scripts
nmap --script vuln <target>

# All HTTP scripts
nmap --script "http-*" <target>
IoT 专用脚本
# RTSP enumeration
nmap -p 554 --script rtsp-methods,rtsp-url-brute <target>

# UPnP discovery
nmap -p 1900 --script upnp-info <target>

# MQTT discovery
nmap -p 1883,8883 --script mqtt-subscribe <target>

# Modbus enumeration
nmap -p 502 --script modbus-discover <target>

结果分析

要提取的关键信息
  1. 开放端口和服务

    • 开放了哪些端口?
    • 正在运行哪些服务?
    • 检测到哪些版本?
  2. 服务指纹

    • 版本检测是否发现了过时的软件?
    • 检测到的版本是否存在已知漏洞?
  3. NSE 脚本结果

    • 是否存在身份验证问题?
    • 是否存在信息泄露?
    • 是否存在配置错误?
  4. 操作系统

    • 正在运行什么 OS?
    • OS 版本是什么?
解析 Nmap 输出

提取开放端口:

grep "^[0-9]" nmap-output.nmap | grep "open"

提取服务版本:

grep -E "^[0-9]+/tcp.*open" nmap-output.nmap

检查 NSE 输出中的漏洞:

grep -i "vuln\|cve\|exploit" nmap-output.nmap

常见 IoT 服务端口

扫描 IoT 设备时,请特别注意:

端口服务描述
21FTP文件传输(通常配置不当)
22SSH远程管理
23Telnet不安全的远程访问
80HTTPWeb 界面
443HTTPS安全 Web 界面
554RTSP视频流传输
1883MQTTIoT 消息传递协议
3702WS-DiscoveryONVIF 设备发现
5000UPnP通用即插即用
8000HTTP Alt替代 HTTP 端口
8080HTTP Proxy替代 HTTP 端口
8883MQTT/TLS安全 MQTT

最佳实践

1. 始终保存输出

运行 nmap 时,务必保存输出:

# GOOD
nmap -p <ports> -sV -sC <target> -oA output/nmap-services

# BAD
nmap -sV -sC <target>
2. 始终使用两阶段策略

除非用户明确要求使用其他扫描类型,否则请使用默认的两阶段策略(参见“默认扫描策略”部分)。

3. 使用恰当的计时设置

根据需求选择计时设置:

# Pentest with authorization: Fast
nmap -sV -sC -T4 <target>

# Red team/stealth: Slow
nmap -sV -sC -T2 <target>
4. 记录扫描参数

始终记录:

  • 使用了哪种扫描类型?
  • 扫描是在何时(日期/时间)执行的?
  • 扫描结果是什么?
  • 是否存在任何异常或错误?
5. 遵守授权
  • 仅扫描你获准扫描的系统
  • 遵守范围限制
  • 留意扫描对生产系统的影响
  • 选择合适的时间,避免造成 DoS

与 IoT 测试工作流集成

用于 IoT 渗透测试
  1. 运行默认的两阶段扫描(端口发现 + 服务检测)
  2. 如果根据开放端口怀疑存在 ONVIF,则运行 wsdiscovery
  3. 如果摄像头的 80/554 端口开放,则运行 onvifscan
  4. 如果发现 Web 界面,则运行针对性的 HTTP 脚本
输出目录用法

始终将结果保存到结构清晰的输出目录(默认为 ./nmap-output/)。完整命令序列请参阅 Implementation Workflow 部分。

故障排除

扫描耗时过长
  • 使用 -T4 加快扫描
  • 限制端口范围:使用 -p 1-1000 代替 -p-
  • 使用 --top-ports 100 代替扫描所有端口
没有结果 / 被防火墙拦截
  • 尝试不同的扫描类型:-sS、-sT、-sA
  • 使用 -Pn 跳过主机发现
  • 尝试使用 -f 发送分片数据包
  • 考虑使用 --source-port 53 或其他受信任端口
需要 Root/Sudo 权限

以下扫描类型需要 Root 权限:

  • -sS(SYN 扫描)
  • -sU(UDP 扫描)
  • -O(操作系统检测)
  • 原始数据包功能
权限被拒绝错误

如果看到“Permission denied”或“Operation not permitted”:

# Run with sudo
sudo nmap <options> <target>

工作流示例

工作流 1:标准单目标扫描(默认)
TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"

# Phase 1: Fast port discovery
sudo nmap -p- $TARGET -oA "$OUTPUT_DIR/nmap-portscan"

# Check for "Host seems down"
if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
    sudo nmap -p- -Pn $TARGET -oA "$OUTPUT_DIR/nmap-portscan"
fi

# Parse open ports
OPEN_PORTS=$(awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' "$OUTPUT_DIR/nmap-portscan.nmap")

# Phase 2: Service detection
if [ -n "$OPEN_PORTS" ]; then
    nmap -p "$OPEN_PORTS" -sV -sC $TARGET -oA "$OUTPUT_DIR/nmap-services"
fi
工作流 2:IoT 摄像头测试

运行工作流 1 中的默认两阶段扫描,然后添加摄像头专属检查:

TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"

# If ONVIF camera detected, check HTTP methods
nmap -p 80 --script http-methods $TARGET -oA "$OUTPUT_DIR/nmap-http"

# Check RTSP service
nmap -p 554 --script rtsp-methods $TARGET -oA "$OUTPUT_DIR/nmap-rtsp"
工作流 3:额外的 UDP/操作系统检测
OUTPUT_DIR="./nmap-output"

# After completing default two-phase scan, optionally add:

# UDP scan (top ports)
sudo nmap -sU --top-ports 100 <target> -oA "$OUTPUT_DIR/nmap-udp"

# OS detection
sudo nmap -O <target> -oA "$OUTPUT_DIR/nmap-os"

# Vulnerability scan
nmap -sV --script vuln <target> -oA "$OUTPUT_DIR/nmap-vuln"

向用户询问的问题

开始扫描前,请确认:

  1. 目标:IP 地址或网络范围是什么?
  2. 范围:单台主机还是网络范围?
  3. 扫描类型:使用默认的两阶段策略,还是用户有特定要求?
  4. 授权:你是否获准扫描此目标?
  5. 特别关注项:初步扫描后,是否有需要重点检查的特定服务或端口?

注意:默认情况下,输出会保存到 ./nmap-output/。

成功标准

成功的 nmap 扫描应满足以下条件:

  • 第一阶段端口发现已完成且无错误
  • 第二阶段已对所有开放端口完成服务检测
  • 结果以所有格式(-oA)保存到输出目录
  • 已识别开放端口及其服务版本
  • NSE 脚本已成功执行
  • 结果已记录并可供分析
  • 提供清晰的摘要,显示:
    • 发现的开放端口数量
    • 检测到的关键服务
    • 输出文件的位置

评论

支持 Markdown