需求:获取局域网所有设备的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
-snPing扫描(跳过端口扫描)迅速排查局域网在线设备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
-PEICMP Echo请求(类似环境ping)常规网络环境,准确性高nmap -PE 192.168.199.0/24
-PPICMP时间戳请求部分禁止Echo请求的环境(如企业防火墙)nmap -PP 192.168.199.107
-PMICMP子网掩码请求探测路由器等网络设备(返回子网掩码信息)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扫描(最常用)
参数扫描类型原理适用场景示例
-sSTCP SYN扫描(半开扫描)发送SYN包,收到SYN-ACK即判定端口开放,不建立完整连接隐蔽性高,避免目标日志记录完整连接nmap -sS 192.168.199.107 -p 22
-sTTCP Connect扫描(全连接)建立完整TCP三次握手raw socket权限(如普通用户),兼容性好nmap -sT 192.168.199.107 -p 80
-sATCP ACK扫描发送ACK包,通过RST包判断端口状态探测防火墙规则(如哪些端口被过滤)nmap -sA 192.168.199.107 -p 1-1000
-sWTCP Window 扫描基于TCP窗口大小判断端口开放补充-sA扫描,提高准确性(仅对部分体系有效)nmap -sW 192.168.199.107
-sMTCP Maimon扫描发送FIN/ACK包,利用系统响应差异部分Linux系统可识别,隐蔽性较好nmap -sM 192.168.199.107
-sNTCP Null扫描不设置TCP标志位,利用RFC 793漏洞对遵循RFC的架构有效(如BSD)nmap -sN 192.168.199.107
-sFTCP FIN扫描仅设置FIN标志位规避基础端口扫描检测nmap -sF 192.168.199.107
-sXTCP Xmas扫描设置FIN、PSH、URG标志位探测对标志位敏感的防火墙nmap -sX 192.168.199.107
--scanflags <flags>自定义TCP标志位手动组合标志(如SYN+FIN)高级场景,定制扫描特征nmap --scanflags SYN,FIN 192.168.199.107
  1. 其他协议扫描
参数扫描类型功能描述示例
-sUUDP扫描探测UDP端口(如DNS 53、SNMP 161),耗时较长nmap -sU 192.168.199.1 -p 53,161
-sOIP协议扫描探测目标支持的IP协议(如ICMP、TCP、UDP)nmap -sO 192.168.199.107
-sYSCTP INIT扫描类似TCP SYN扫描,针对SCTP协议端口nmap -sY 192.168.199.200 -p 3847
-sZSCTP COOKIE-ECHO扫描基于SCTP COOKIE机制,隐蔽性高nmap -sZ 192.168.199.200
-b <FTP relay>FTP弹跳扫描通过FTP代理扫描目标,隐藏真实 IPnmap -b ftp://user:pass@192.168.199.5 192.168.199.107(需FTP服务器支持)
  1. 空闲扫描(高级隐蔽)
参数功能描述示例
-sI <zombie[:port]>利用僵尸主机扫描,隐藏真实IPnmap -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=defaultnmap -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,隐蔽扫描启用-T0nmap -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
--webxmlNmap.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
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐