Nmap扫描Skill nmap

Nmap扫描技能提供专业网络侦察和端口扫描服务,支持快速、全面、UDP、隐形等多种扫描类型,服务检测,漏洞扫描和NSE脚本执行。适用于需要枚举网络服务、检测版本或进行网络侦察的场景。

渗透测试 4 次安装 31 次浏览 更新于 3/2/2026

以下是nmap扫描技能的中文翻译:


name: nmap description: 专业网络侦察和端口扫描使用nmap。支持各种扫描类型(快速,全面,UDP,隐形),服务检测,漏洞扫描和NSE脚本。当您需要枚举网络服务,检测版本或执行网络侦察时使用。

Nmap扫描 - 专业网络侦察

您正在帮助用户使用nmap执行专业网络侦察和端口扫描。这项技能提供了各种扫描类型,输出格式和结果分析的指导。

输出目录

目录结构

nmap-output/
├── nmap-portscan.nmap      # 初始快速端口发现
├── nmap-portscan.xml
├── nmap-portscan.gnmap
├── nmap-services.nmap      # 详细服务检测在开放端口
├── nmap-services.xml
└── nmap-services.gnmap

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

默认扫描策略

重要:除非用户明确请求不同的扫描类型,否则始终使用这种两阶段方法:

第一阶段:快速端口发现(Root SYN扫描)

sudo nmap -p- <target> -oA <output-dir>/nmap-portscan
  • 为什么sudo:以root身份运行启用快速SYN扫描(-sS是隐含的)
  • 为什么-p-:快速扫描所有65535个端口
  • 持续时间:SYN扫描通常1-3分钟
  • 输出:所有开放端口的列表

主机下线检测: 如果扫描输出包含"注意:主机似乎下线",则自动重试:

sudo nmap -p- -Pn <target> -oA <output-dir>/nmap-portscan
  • -Pn:跳过主机发现,将主机视为在线
  • 当防火墙阻止ping探测时使用

第二阶段:目标服务检测

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

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. 准确性:两阶段方法减少了假阴性

解析开放端口

第一阶段后,使用以下命令提取开放端口:

# 从.gnmap文件中提取开放端口
grep "Ports:" <output-dir>/nmap-portscan.gnmap | sed 's/.*Ports: //g' | sed 's|/|
|g' | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//'

或从.nmap文件解析:

grep "^[0-9]" <output-dir>/nmap-portscan.nmap | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//'

实施工作流程

当nmap扫描技能被调用时:

  1. 创建输出目录

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

    sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan"
    
  3. 检查"主机似乎下线"错误

    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=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
    

’ ‘,’ | sed ‘s/,$//’)


5. **运行第二阶段:在开放端口上进行服务检测**
```bash
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
  1. 报告结果位置
    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和配置错误
  • 可能嘈杂并触发警报

操作系统检测

用于识别操作系统:

sudo nmap -O <target> -oA <output-prefix>
  • -O:启用操作系统检测
  • 需要root权限
  • 使用TCP/IP堆栈指纹识别

替代扫描类型

如果用户明确请求而不是默认的两阶段策略,则提供以下扫描类型:

快速扫描(仅限前1000个端口)

仅当用户明确请求快速/快速扫描时使用:

nmap -sV -sC <target> -oA <output-dir>/nmap-quick
  • -sV:服务版本检测
  • -sC:运行默认NSE脚本
  • -oA:输出所有格式(正常,XML,grepable)
  • 仅扫描前1000个最常见的端口
  • 持续时间:1-3分钟
  • 限制:可能错过非标准端口上的服务

扫描工作流程

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

第一阶段:端口发现

  1. 运行快速SYN扫描:sudo nmap -p- <target> -oA <output-dir>/nmap-portscan
  2. 检查"主机似乎下线"并重试-Pn标志
  3. 等待扫描完成(通常1-3分钟)

第二阶段:服务检测 4. 从第一阶段结果中解析开放端口 5. 运行针对性服务检测:nmap -p <OPEN_PORTS> -sV -sC <target> -oA <output-dir>/nmap-services 6. 等待扫描完成(通常1-3分钟)

第三阶段:分析 7. 审查服务检测结果以确定:

  • 哪些服务正在运行?
  • 检测到哪些版本?
  • 是否有任何有趣服务(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 - Grepable格式,用于命令行处理

定时和性能

定时模板

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

  • -T0(偏执):极慢,用于IDS回避
  • -T1(鬼鬼祟祟):非常慢,用于IDS回避
  • -T2(礼貌):慢,带宽消耗较少
  • -T3(正常):默认,平衡速度
  • -T4(积极):快速,推荐用于现代网络
  • -T5(疯狂):非常快,可能会错过结果

默认:使用-T3或省略(默认为T3) 快速扫描:当速度重要且网络可以处理时使用-T4 隐形:用于回避的-T1-T2

超时考虑

  • 第一阶段端口发现(sudo nmap -p-):180-300秒超时(3-5分钟)
  • 第二阶段服务检测(nmap -p <ports> -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脚本

常见脚本类别

# 认证脚本
nmap --script auth <target>

# 暴力破解脚本
nmap --script brute <target>

# 默认安全脚本
nmap -sC <target>  # 等同于 --script default

# 发现脚本
nmap --script discovery <target>

# 漏洞脚本
nmap --script vuln <target>

# 所有HTTP脚本
nmap --script "http-*" <target>

IoT特定脚本

# RTSP枚举
nmap -p 554 --script rtsp-methods,rtsp-url-brute <target>

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

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

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

结果分析

提取关键信息

  1. 开放端口和服务

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

    • 版本检测是否揭示了过时的软件?
    • 是否有已知漏洞的检测版本?
  3. NSE脚本结果

    • 认证问题?
    • 信息披露?
    • 配置错误?
  4. 操作系统

    • 正在运行什么操作系统?
    • 什么操作系统版本?

解析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设备时,特别关注:

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

最佳实践

1. 始终保存输出

运行nmap时从不保存输出:

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

# 坏的
nmap -sV -sC <target>

2. 始终使用两阶段策略

始终使用默认的两阶段策略,除非明确告知否则:

# 第一阶段:快速端口发现
sudo nmap -p- <target> -oA nmap-portscan

# 第二阶段:开放端口上的服务检测
nmap -p <OPEN_PORTS> -sV -sC <target> -oA nmap-services

3. 使用适当的定时

根据您的需求匹配定时:

# 获得授权的渗透测试:快速
nmap -sV -sC -T4 <target>

# 红队/隐形:慢
nmap -sV -sC -T2 <target>

4. 记录扫描参数

始终记录:

  • 使用了什么扫描类型?
  • 扫描执行的日期/时间?
  • 扫描结果是什么?
  • 任何异常或错误?

5. 尊重授权

  • 仅扫描您有权扫描的系统
  • 尊重范围限制
  • 了解扫描对生产系统的影响
  • 使用适当的定时以避免DoS

与IoT测试工作流程集成

对于IoT渗透测试

  1. 运行默认的两阶段扫描(端口发现+服务检测)
  2. 如果基于开放端口怀疑ONVIF,运行wsdiscovery
  3. 如果相机上开放端口80/554,运行onvifscan
  4. 如果发现Web界面,运行针对性的HTTP脚本

输出目录使用

始终保存到组织良好的输出目录:

OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"

# 第一阶段:端口发现
sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan"

# 第二阶段:服务检测
nmap -p <OPEN_PORTS> -sV -sC <target> -oA "$OUTPUT_DIR/nmap-services"

故障排除

扫描时间过长

  • 使用-T4进行更快的扫描
  • 限制端口范围:-p 1-1000而不是-p-
  • 使用--top-ports 100而不是所有端口

无结果/防火墙

  • 尝试不同的扫描类型:-sS-sT-sA
  • 使用-Pn跳过主机发现
  • 尝试-f用于分片包
  • 考虑使用--source-port 53或其他受信任端口

需要Root/Sudo

这些扫描类型需要root:

  • -sS(SYN扫描)
  • -sU(UDP扫描)
  • -O(操作系统检测)
  • 原始数据包功能

权限被拒绝错误

如果您看到"权限被拒绝"或"操作不允许":

# 使用sudo运行
sudo nmap <options> <target>

示例工作流程

工作流程1:标准单目标扫描(默认)

TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"

# 第一阶段:快速端口发现
sudo nmap -p- $TARGET -oA "$OUTPUT_DIR/nmap-portscan"

# 检查"主机似乎下线"
if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
    sudo nmap -p- -Pn $TARGET -oA "$OUTPUT_DIR/nmap-portscan"
fi

# 解析开放端口
OPEN_PORTS=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//')

# 第二阶段:服务检测
if [ -n "$OPEN_PORTS" ]; then
    nmap -p "$OPEN_PORTS" -sV -sC $TARGET -oA "$OUTPUT_DIR/nmap-services"
fi

工作流程2:IoT相机测试

OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"

# 1. 运行默认两阶段扫描
sudo nmap -p- 192.168.1.100 -oA "$OUTPUT_DIR/nmap-portscan"
OPEN_PORTS=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//')
nmap -p "$OPEN_PORTS" -sV -sC 192.168.1.100 -oA "$OUTPUT_DIR/nmap-services"

# 2. 如果检测到ONVIF相机,检查HTTP方法
nmap -p 80 --script http-methods 192.168.1.100 -oA "$OUTPUT_DIR/nmap-http"

# 3. 检查RTSP服务
nmap -p 554 --script rtsp-methods 192.168.1.100 -oA "$OUTPUT_DIR/nmap-rtsp"

工作流程3:额外的UDP/OS检测

OUTPUT_DIR="./nmap-output"

# 在完成默认两阶段扫描后,可选择添加:

# UDP扫描(顶级端口)
sudo nmap -sU --top-ports 100 <target> -oA "$OUTPUT_DIR/nmap-udp"

# 操作系统检测
sudo nmap -O <target> -oA "$OUTPUT_DIR/nmap-os"

# 漏洞扫描
nmap -sV --script vuln <target> -oA "$OUTPUT_DIR/nmap-vuln"

向用户询问的问题

在开始扫描之前,澄清:

  1. 目标:IP地址或网络范围是什么?
  2. 范围:单个主机还是网络范围?
  3. 扫描类型:使用默认的两阶段策略还是用户有特定要求?
  4. 授权:您有权限扫描此目标吗?
  5. 特别兴趣:在初始扫描后是否需要关注特定服务或端口?

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

成功标准

成功的nmap扫描包括:

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