欢迎光临
我们一直在努力

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

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

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

Nmap

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

功能

目标指定

  • 基础目标格式
  • 支持主机名、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范围)

  • 目标筛选参数
  • 参数功能描述实战示例
    -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.txt,exclude.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

    扫描技术

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

  • 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
  • 其他协议扫描
  • 参数扫描类型功能描述示例
    -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服务器支持)
  • 空闲扫描(高级隐蔽)
  • 参数功能描述示例
    -sI <zombie[:port]> 利用僵尸主机扫描,隐藏真实IP nmap -sI 192.168.199.6:80 192.168.199.107(用192.168.199.6作为僵尸主机)

    端口设置与扫描顺序

  • 端口指定与过滤
  • 参数功能描述示例
    -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%的端口)
  • 扫描顺序控制
  • 参数功能描述示例
    -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

    扫描示例

    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下 在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 网络扫描工具Nmap和Zenmap:简介、命令行解读、实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址