网络扫描工具Nmap和Zenmap:简介、命令行解读、实战

需求:获取局域网所有设备的IP地址。

本文记录围绕上述需求学到的技术。

Nmap

官网,Network Mapper缩写,C/C++/Lua等语言实现、开源(GitHub,13.5K Star,2.9K Fork)跨平台网络扫描和安全审计工具,支持主机发现、端口探测、服务识别、操作系统类型和版本识别、漏洞检测等功能。

功能

目标指定

  1. 基础目标格式

支持主机名、IP、网段等多种格式,灵活适配不同扫描场景:

单个目标:scanme.nmap.org(域名)、192.168.199.107(IP)

网段目标:microsoft.com/24(CIDR格式)、192.168.0.1;10.0.0-255.1-254(分号分隔多网段)

范围目标:192.168.199.1-100(IP范围)

  1. 目标筛选参数
参数 功能描述 实战示例
-iL <inputfilename> 从文件读取目标列表(每行一个目标) nmap -iL targets.txt(targets.txt含192.168.199.1、scanme.nmap.org、(https://scanme.nmap.org/ "scanme.nmap.org")等)
-iR <num hosts> 随机选择指定数量的目标扫描 nmap -iR 50 -p 80,随机扫描50个主机的80端口,适合批量探测
--exclude <host1,host2> 排除指定目标(支持单个/多个/网段) nmap 192.168.199.0/24 --exclude 192.168.199.1,192.168.199.107(排除网关和特定主机)
--excludefile <exclude_file> 从文件读取需排除的目标 nmap 192.168.199.0/24 --excludefile exclude.txtexclude.txt含需跳过的IP

主机发现

用于判断目标主机是否在线,避免扫描离线主机浪费时间,官方帮助多种探测方式:

参数 功能描述 适用场景 示例
-sL 仅列出目标列表,不探测存活 验证目标范围是否正确(如避免误扫外部网络) nmap -sL 192.168.199.0/24
-sn Ping扫描(跳过端口扫描) 迅速排查局域网在线设备 nmap -sn 192.168.199.0/24(显示所有Status: Up的主机)
-Pn 跳过主机发现,默认所有目标在线 目标开启防火墙屏蔽Ping(如服务器),需强制扫描端口 nmap -Pn 192.168.199.107 -p 22
-PS [portlist] TCP SYN探测(默认443端口) 绕过拦截ICMP的防火墙 nmap -PS22,80 192.168.199.107(用22、80端口SYN包探测存活)
-PA [portlist] TCP ACK探测(默认80端口) 检测对ACK包有响应的主机 nmap -PA443 192.168.199.107
-PU [portlist] UDP探测(默认40125端口) 探测路由器、IoT设备(多响应UDP包) nmap -PU53 192.168.199.1(用DNS 53端口探测网关)
-PY [portlist] SCTP探测 针对支持SCTP协议的主机(如电信设备) nmap -PY3847 192.168.199.200
-PE ICMP Echo请求(类似环境ping) 常规网络环境,准确性高 nmap -PE 192.168.199.0/24
-PP ICMP时间戳请求 部分禁止Echo请求的环境(如企业防火墙) nmap -PP 192.168.199.107
-PM ICMP子网掩码请求 探测路由器等网络设备(返回子网掩码信息) nmap -PM 192.168.199.1
-PO [protocol list] IP协议探测(支持ICMP/TCP/UDP) 复杂网络,多协议组合验证存活 nmap -POicmp,tcp 192.168.199.107
--traceroute 追踪到目标的路由路径 否在局域网内)就是排查网络跳转节点(如判断目标 nmap -sn --traceroute 192.168.199.107

域名解析控制

参数 功能描述 适用场景 示例
-n 禁用DNS解析(不获取主机名,提速) 网络环境中DNS服务器不稳定或响应缓慢,希望快速结束扫描;对IP地址进行批量扫描,无需获取主机名信息的场景 nmap -n 192.168.199.0/24
-R 强制DNS解析(所有目标获取主机名) 需准确获取目标主机名称,以便进一步定位或识别主机身份;在安全审计或网络管理中,需要将IP与主机名对应记录的场景 nmap -R 192.168.199.107
--dns-servers <serv1,serv2> 指定自定义DNS(如谷歌8.8.8.8) 系统默认DNS解析不准确或无法解析目标;需绕过本地DNS服务器,使用更可靠的公共DNS服务器进行解析 nmap --dns-servers 8.8.8.8,114.114.114.114 scanme.nmap.org
--system-dns 应用系统默认DNS解析 对解析结果依赖本地网络配置;在信任本地DNS服务器且网络环境稳定,希望使用默认配备快速执行扫描的场景 nmap --system-dns 192.168.199.107

扫描技术

根据协议和探测方式分类,适配不同端口类型和防火墙环境:

  1. TCP扫描(最常用)
参数 扫描类型 原理 适用场景 示例
-sS TCP SYN扫描(半开扫描) 发送SYN包,收到SYN-ACK即判定端口开放,不建立完整连接 隐蔽性高,避免目标日志记录完整连接 nmap -sS 192.168.199.107 -p 22
-sT TCP Connect扫描(全连接) 建立完整TCP三次握手 raw socket权限(如普通用户),兼容性好 nmap -sT 192.168.199.107 -p 80
-sA TCP ACK扫描 发送ACK包,通过RST包判断端口状态 探测防火墙规则(如哪些端口被过滤) nmap -sA 192.168.199.107 -p 1-1000
-sW TCP Window 扫描 基于TCP窗口大小判断端口开放 补充-sA扫描,提高准确性(仅对部分体系有效) nmap -sW 192.168.199.107
-sM TCP Maimon扫描 发送FIN/ACK包,利用系统响应差异 部分Linux系统可识别,隐蔽性较好 nmap -sM 192.168.199.107
-sN TCP Null扫描 不设置TCP标志位,利用RFC 793漏洞 对遵循RFC的架构有效(如BSD) nmap -sN 192.168.199.107
-sF TCP FIN扫描 仅设置FIN标志位 规避基础端口扫描检测 nmap -sF 192.168.199.107
-sX TCP Xmas扫描 设置FIN、PSH、URG标志位 探测对标志位敏感的防火墙 nmap -sX 192.168.199.107
--scanflags <flags> 自定义TCP标志位 手动组合标志(如SYN+FIN) 高级场景,定制扫描特征 nmap --scanflags SYN,FIN 192.168.199.107
  1. 其他协议扫描
参数 扫描类型 功能描述 示例
-sU UDP扫描 探测UDP端口(如DNS 53、SNMP 161),耗时较长 nmap -sU 192.168.199.1 -p 53,161
-sO IP协议扫描 探测目标支持的IP协议(如ICMP、TCP、UDP) nmap -sO 192.168.199.107
-sY SCTP INIT扫描 类似TCP SYN扫描,针对SCTP协议端口 nmap -sY 192.168.199.200 -p 3847
-sZ SCTP COOKIE-ECHO扫描 基于SCTP COOKIE机制,隐蔽性高 nmap -sZ 192.168.199.200
-b <FTP relay> FTP弹跳扫描 通过FTP代理扫描目标,隐藏真实 IP nmap -b ftp://user:pass@192.168.199.5 192.168.199.107(需FTP服务器支持)
  1. 空闲扫描(高级隐蔽)
参数 功能描述 示例
-sI <zombie[:port]> 利用僵尸主机扫描,隐藏真实IP nmap -sI 192.168.199.6:80 192.168.199.107(用192.168.199.6作为僵尸主机)

端口设置与扫描顺序

  1. 端口指定与过滤
参数 功能描述 示例
-p <port ranges> 指定扫描端口(拥护TCP/UDP/SCTP区分) -p 22(TCP 22)、-p U:53,T:80-443,S:9(UDP 53 + TCP 80-443 + SCTP 9)
--exclude-ports <port ranges> 排除指定端口 nmap -p 1-1000 --exclude-ports 22,80 192.168.199.107
-F 快速扫描(仅预设100个常用端口) nmap -F 192.168.199.107(适合快速排查常见服务)
--top-ports <number> 扫描指定数量的常用端口 nmap --top-ports 200 192.168.199.107(扫描前200个高频端口)
--port-ratio <ratio> 扫描使用频率高于指定比例的端口 nmap --port-ratio 0.2 192.168.199.107(扫描使用频率>20%的端口)
  1. 扫描顺序控制
参数 功能描述 示例
-r 按端口号顺序扫描(默认随机) nmap -r 192.168.199.107 -p 1-100(按 1→2→...→100 顺序扫描)
(默认) 随机扫描端口(降低扫描行为特征) nmap 192.168.199.107 -p 1-1000

服务与版本探测

精准识别端口对应的服务类型与版本,协助判断漏洞风险:

参数 功能描述 示例
-sV 启用服务版本探测 nmap -sV 192.168.199.107(显示如22/tcp open ssh OpenSSH 8.0
--version-intensity <level> 设置探测强度(0-9,默认5) nmap -sV --version-intensity 9 192.168.199.107(最精准,耗时最长,适合深度探测)
--version-light 轻量探测(强度2,快速) nmap -sV --version-light 192.168.199.0/24(批量扫描时提速)
--version-all 全量探测(强度9,尝试所有探针) nmap -sV --version-all 192.168.199.107(对服务版本识别有严格要求时使用)
--version-trace 显示版本探测的详细过程(调试用) nmap -sV --version-trace 192.168.199.107(查看探测包交互细节)

脚本扫描

基于Nmap脚本引擎(NSE),扩展扫描效果(漏洞检测、信息收集等),官方内置数百个脚本:

参数 功能描述 示例
-sC 运行默认脚本集(等价于--script=default nmap -sC 192.168.199.107(基础漏洞检测 + 服务配置查看)
--script=<scripts> 指定脚本 / 脚本类别(逗号分隔) --script ssh-brute(SSH 弱密码破解)、--script vuln(所有漏洞检测脚本)、--script http-enum,http-vuln-cve2021-41773(HTTP 目录枚举 + Apache 漏洞检测)
--script-args <n1=v1,n2=v2> 给脚本传递参数 nmap --script http-brute --script-args userdb=user.txt,passdb=pass.txt 192.168.199.107(指定爆破的用户名 / 密码字典)
--script-args-file <filename> 从文件读取脚本参数 nmap --script http-brute --script-args-file brute-args.txt 192.168.199.107
--script-trace 显示脚本发送 / 接收的所有数据(调试) nmap --script http-enum --script-trace 192.168.199.107(查看HTTP请求/响应细节)
--script-updatedb 更新脚本数据库(新增脚本后执行) nmap --script-updatedb(确保NSE识别新添加的脚本)
--script-help <scripts> 查看脚本帮助信息 nmap --script-help ssh-brute(了解ssh-brute脚本的用法和参数)

操作系统探测

通过分析目标主机的网络特征,判断其运行的操作系统类型与版本的技术。主要依托TCP/IP协议栈指纹(如TTL值、窗口大小)、默认端口开放情况、服务响应信息等,精准识别Windows、Linux等架构及具体版本,为网络管理(资产清查)、安全测试(漏洞匹配)献出核心依据,是网络运维与安全防护的基础步骤。

参数 功能描述 使用场景 示例
-O 启用操作系统检测 当得了解目标主机的操作系统类型,以便进一步制定攻击策略或系统配置时运用 nmap -O 192.168.1.100
--osscan-limit 将操作系统检测限制在可能的目标上 扫描大量主机时,为提高效率,仅对疑似存在主机的目标进行操作系统检测 nmap --osscan-limit 192.168.1.0/24
--osscan-guess 更积极地猜测操作系统 当常规检测难以确定操作系统类型,需要更激进的推测时使用 nmap --osscan-guess 192.168.1.120

时间与性能

用于控制扫描的时间节奏与运行效率,平衡扫描速度与隐蔽性/资源占用,适配不同网络环境与扫描需求。

参数 功能描述 使用场景 示例
-T<0-5> 设置时间模板(数值越高速度越快) 根据网络环境和扫描需求调整扫描速度,如快速扫描启用-T5,隐蔽扫描启用-T0 nmap -T4 192.168.1.0/24
--min-hostgroup/max-hostgroup <size> 设置并行主机扫描组大小 扫描大量主机时,控制并行扫描的主机数量,避免网络拥堵 nmap --min-hostgroup 10 --max-hostgroup 50 192.168.1.0/16
--min-parallelism/max-parallelism <numprobes> 控制探测并行度 调整探测请求的并行数量,平衡扫描速度和资源消耗 nmap --min-parallelism 10 --max-parallelism 50 target.com
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time> 指定探测往返时间 网络状况不佳时,调整探测响应时间阈值,防止误判 nmap --min-rtt-timeout 500ms --max-rtt-timeout 2s 192.168.1.1
--max-retries <tries> 限制端口扫描探测重传次数 避免因网络波动导致过多的重复探测请求 nmap --max-retries 3 192.168.1.0/24
--host-timeout <time> 设置目标主机超时时间 长时间无响应的主机,自动放弃扫描,提高整体效率 nmap --host-timeout 10m 192.168.1.0/16
--scan-delay/--max-scan-delay <time> 调整探测间隔时间 为降低扫描对目标网络的影响,增加探测间隔 nmap --scan-delay 1s 192.168.1.10
--min-rate <number> 限制每秒发送数据包的最小速率 确保扫描在一定速度下进行,防止速度过慢 nmap --min-rate 100 192.168.1.0/24
--max-rate <number> 限制每秒发送数据包的最大速率 避免扫描流量过大引起网络拥塞或被防火墙发现 nmap --max-rate 500 192.168.1.0/16

防火墙、IDS绕过与欺骗

防火墙(FIREWALL)和入侵检测系统(IDS)的绕过与欺骗(EVASION AND SPOOFING)技术,旨在通过各种手段绕过防火墙的访问控制和IDS的检测机制

参数 功能描述 使用场景 示例
-f; --mtu <val> 对数据包进行分片(可指定 MTU 值) 绕过防火墙对完整数据包的检测规则 nmap -f 192.168.1.100或nmap --mtu 1400 192.168.1.1
-D <decoy1,decoy2[,ME],...> 采用诱饵 IP 隐藏扫描行为 隐藏真实扫描源 IP,防止被目标系统追踪 nmap -D 192.168.1.10,192.168.1.20,ME 192.168.1.50
-S <IP_Address> 伪装源地址 模拟其他 IP 地址进行扫描,实现匿名扫描 nmap -S 10.0.0.1 192.168.1.100
-e <iface> 使用指定网络接口 当主机有多网卡时指定特定网卡进行扫描 nmap -e eth0 192.168.1.0/24
-g/--source-port <portnum> 使用指定端口号作为源端口 绕过防火墙对特定源端口的过滤规则 nmap -g 53 192.168.1.10或nmap --source-port 80 192.168.1.1
--proxies <url1,[url2],...> 通过 HTTP/SOCKS4 代理中继连接 隐藏真实 IP 地址,绕过网络访问限制 nmap --proxies http://proxy1.example.com,http://proxy2.example.com 192.168.1.100
--data <hex string> 在发送的数据包中附加自定义十六进制负载 自定义扫描特征,绕过基于特征的检测 nmap --data "01020304" 192.168.1.1
--data-string <string> 在发送的数据包中附加自定义ASCII字符串 同样用于自定义扫描特征 nmap --data-string "testscan" 192.168.1.10
--data-length <num> 在发送的数据包中附加随机数据 增加数据包长度,干扰检测机制 nmap --data-length 100 192.168.1.0/24
--ip-options <options> 发送带有指定IP选项的数据包 进行特定的IP协议测试或绕过防护机制 nmap --ip-options "rr" 192.168.1.1
--ttl <val> 设置IP生存时间字段 伪装数据包的路由特征,绕过基于TTL的检测 nmap --ttl 64 192.168.1.100
--spoof-mac <mac address/prefix/vendor name> 伪装MAC地址 绕过基于MAC地址的访问控制或检测 nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1或nmap --spoof-mac Apple 192.168.1.10
--badsum 发送带有虚假TCP/UDP/SCTP校验和的数据包 干扰基于校验和的检测机制 nmap --badsum 192.168.1.0/24

输出控制

管理扫描结果的输出形式、保存方式与展示内容,方便用户查看、分析或后续二次处理扫描数据。

参数 功能描述 使用场景 示例
-oN/-oX/-oS/-oG <file> 分别以普通、XML、s <rIpt kIddi3和 Grepable 格式输出扫描结果到指定文件 根据后续分析需求选择合适的输出格式,如XML格式便于解析
-oA <basename> 同时以三种主要格式输出结果 方便以多种方式查看和分析扫描结果 nmap -oA myscan 192.168.1.0/24
-v 增加详细程度(可使用-vv或更多获取更多信息) 需要查看更详细的扫描过程和结果信息时使用 nmap -vv 192.168.1.1
-d 增加调试级别(可使用-dd或更多获取更多信息) 排查扫描过程中的障碍,获取调试信息 nmap -dd 192.168.1.10
--reason 显现端口处于特定状态的原因 分析端口状态时,了解导致该状态的具体原因 nmap --reason 192.168.1.100
--open 仅显示开放(或可能开放)的端口 快速查看目标主机开放的端口,提高效率 nmap --open 192.168.1.0/24
--packet-trace 显现所有发送和接收的数据包 分析网络通信过程,排查问题 nmap --packet-trace 192.168.1.1
--iflist 打印主机接口和路由信息(用于调试) 检查网络接口和路由配置是否正确 nmap --iflist
--append-output 将结果追加到指定输出文件,而不是覆盖 多次扫描同一目标并保留所有结果时使用 nmap --append-output -oN scan.log 192.168.1.10
--resume <filename> 恢复中断的扫描 扫描过程因各种原因中断后,继续未完成的扫描 nmap --resume incomplete_scan.nmap 192.168.1.0/24
--noninteractive 禁用通过键盘进行运行时交互 自动化脚本执行扫描,避免人工干预 nmap --noninteractive 192.168.1.100
--stylesheet <path/URL> 指定 XSL 样式表将 XML 输出转换为 HTML 将 XML 格式的扫描结果转换为便于查看的 HTML 页面 nmap --stylesheet mystyle.xsl -oX scan.xml -oA myscan 192.168.1.1
--webxml Nmap.Org引用样式表以获得更便携的 XML 确保 XML 输出符合标准格式,便于在不同环境使用 nmap --webxml -oX scan.xml 192.168.1.100
--no-stylesheet 防止将XSL样式表与XML输出关联 不需要对XML输出进行样式转换时运用 nmap --no-stylesheet -oX scan.xml 192.168.1.1

辅助操作

MISC是Nmap中整合非核心但实用功能的模块,涵盖扫描环境适配、权限控制、版本查询等辅助运行,用于补充核心扫描特性,适配特殊场景需求。

参数 功能描述 使用场景 示例
-6 启用 IPv6 扫描 扫描 IPv6 地址的主机 nmap -6 2001:db8::1
-A 启用操作系统检测、版本检测、脚本扫描和路由追踪 进行全面的主机探测,获取详细信息 nmap -A 192.168.1.100
--datadir <dirname> 指定自定义 Nmap 数据文件位置 当默认数据文件位置不可用时,指定新路径 nmap --datadir /custom/nmap/data 192.168.1.1
--send-eth/--send-ip 利用原始以太网帧或 IP 数据包发送 根据网络环境选择合适的数据包发送方式 nmap --send-eth 192.168.1.10或nmap --send-ip 192.168.1.1
--privileged 假设用户具有完全权限 当用户实际拥有完全权限,加快扫描速度 nmap --privileged 192.168.1.0/24
--unprivileged 假设用户缺少原始套接字权限 用户权限受限情况下进行扫描 nmap --unprivileged 192.168.1.100
-V 打印版本号 查看当前 Nmap 软件的版本信息 nmap -V
-h 打印帮忙摘要页面 查看 Nmap 命令的利用帮助 nmap -h

扫描示例

bash 复制代码
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80

实战

打开官网,选择对应的操作系统,如Windows则下载nmap-7.991-setup.exe文件安装,双击安装即可。

下图可看到围绕着Nmap一系列工具:Npcap、Ncat、Nping、Ndiff、Zenmap。

安装成功后,将安装目录如D:\Program\Nmap添加到环境变量,则可在任何位置,打开命令行使用nmap命令:nmap -sn 192.168.4.0/24

初步能满足,期望效果:

Npcap

专为Windows开发的一款网络抓包SDK,提供被应用程序调用的库文件和系统驱动程序。

功能:

  • 可以得到原始(raw)网络数据,即未经过 TCP/IP 协议栈的数据,也就是网卡收到的数据
  • 设置接收过滤器,这样收到的数据就是我们感兴趣的数据,比如某个端口的数据
  • 发送原始(raw)网络数据的功能

Zenmap

Nmap官方推出、免费开源跨平台(Linux、Windows、Mac OS X、BSD等)GUI应用程序,旨在让Nmap对初学者更友好,也为经验丰富的Nmap用户提供高级功能。

常用扫描可保存为配置文件,以便于重复运行。命令创建器允许交互式创建Nmap命令行。扫描结果可保存并稍后查看。保存的扫描结果可相互比较,以查看它们之间的差异。最近扫描的结果存储在可搜索的数据库中。

实战

在Windows下安装Zenmap时,需先安装Npcap。

上面安装Nmap时,默认勾选即安装Zenmap

一看图标就知道是Python GUI程序,源码也在Nmap

相关推荐
abc light17 分钟前
Linux TCP网络
linux·网络·tcp/ip
OPEN-F19 分钟前
C++综合实战:网络编程入门与HTTP客户端
网络·c++·http
Lust Dusk35 分钟前
【最新】VMware虚拟机下载安装教程
网络·网络安全·系统安全
zhao32668575140 分钟前
动态IP怎么选购更合适?HTTP代理的使用指南有哪些关键要点
网络·tcp/ip·http
张宇Joaquin1 小时前
鲲鹏统一并行加速库KUPL——众核并行调度介绍
网络
捷烽1 小时前
光纤熔接机国内外品牌对比(2026 选购指南):进口与国产怎么选
运维·网络·信息与通信
迪丽热爱1 小时前
多媒体应用12-826(补)
网络
可爱系程序猿2 小时前
添加网络打印机提示 0x000006ba:从 RPC 服务、Print Spooler 到主机发现排查
网络·网络协议·rpc
AAA代码批发商2 小时前
Days37 Linux C 网络编程:UDP、TCP 与 HTTP 协议实战详解
linux·c语言·网络