nmap手册简记
主机发现
-
-sL(列表扫描):不对主机发送任何数据包,而是对指定的 IP 地址范围进行反向 DNS 查询,即通过 DNS 服务器的 PTR(Pointer)记录将 IP 地址转换为域名;
-
-sP(Ping扫描):通过发送一个 Echo 类 ICMP 请求和 SYN 报文到 80 端口和 TCP ACK 到 80 端口(-PA80)来确认主机是否存活(当特权用户扫描局域网的目标主机时还会发送 ARP 请求 -PR );旧版操作不推荐使用
-
-sn :仅执行主机发现(如Ping扫描),不进行端口扫描;现代Nmap中,-sn是标准的主机发现选项,行为与旧版-sP完全一致:组合多种探测方式(ICMP、TCP SYN/ACK、ARP等)判断主机存活状态。
-
-Pn(无ping):跳过主机发现阶段直接扫描ip地址的端口;
-
-PS(TCP SYN Ping):向目的主机发送一个带有 SYN 标志的空TCP报文,若目的主机返回RST或SYN/ACK则主机存活,超时则主机离线;可通过 -PS22,443,8080 指定多个端口
-
-PA(TCP ACK Ping):向目的主机发送一个仅设置ACK标志位的TCP空报文,无论端口开关都会返回一个RST报文则证明主机存活,超时则离线或被拦截;默认端口:80,可自定义如 -PA22,443,8080。
-
- 关键区别:
-PS通过SYN触发连接握手,-PA通过ACK触发异常状态响应。
在无状态防火墙环境中,-PA的ACK报文可能被放行(因未匹配SYN过滤规则),而-PS的SYN可能被拦截
- 关键区别:
-
-PU(UDP Ping):Nmap默认发送一个空UDP报文(除非通过--data-length指定数据长度),目标端口默认为31338(可通过修改nmap.h中的DEFAULT_UDP_PROBE_PORT自定义)端口选择逻辑:默认选择冷门端口(如31338、40125),目的是减少对开放服务的干扰,因为向开放端口发送空UDP报文可能被服务视为无效请求而忽略;若主机存活且UDP端口未开放则目标主机返回 ICMP端口不可达(Type 3, Code 3) 报文,表明主机在线且端口未开放;若端口开放则目的主机会丢弃该空UDP报文不做回应;但特定服务(如chargen协议)可能返回UDP数据包,间接暴露主机存活;支持多端口并发探测(如-PU53,161)及自定义数据负载(--data-length),适应复杂网络配置;UDP协议无确认机制,Nmap需等待超时(默认1秒)后重传,扫描速度远低于TCP探测
-
-PE; -PP; -PM (ICMP Ping Types):-PE(ICMP Echo Request,类型 8)发送Echo类 ICMP 回声请求(Type 8);-PP(ICMP Timestamp Request,类型 13)发送 时间戳请求(Type 13),若目标主机支持,返回 时间戳应答;-PM(ICMP Address Mask Request,类型 17)发送 地址掩码请求(Type 17),若目标主机支持,返回 地址掩码应答(Type 18)
-
-PR (ARP Ping):是Nmap用于局域网(LAN)主机发现的核心技术,其底层依赖 地址解析协议(ARP):通过像局域网广播ARP请求包通过询问目标ip的mac地址来判断主机是否存活;当Nmap检测到目标IP属于本地局域网(如RFC1918私有地址段),默认启用ARP扫描,即使指定了其他探测类型。通过--send-ip参数可强制Nmap使用IP层协议(如ICMP/TCP)替代ARP扫描;对于IPv6网络,-PR使用 ICMPv6邻居发现协议(NDP) 替代ARP
*** -n (不用域名解析):告诉Nmap 永不对它发现的活动IP地址进行反向域名解析。显著减少耗时;**
*** -R 选项:强制对所有目标(无论是否存活)执行反向解析;**--system-dns:使用操作系统自带的 DNS 解析器(而非 Nmap 内置的并行解析器),速度较慢但兼容性更好 一般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。
端口扫描基础
Nmap所识别的6个端口状态:
-
open(开放的):应用程序正在该端口接收TCP 连接或者UDP报文。
-
closed(关闭的):接受Nmap的探测报文并作出响应,但没有应用程序在其上监听。例如,主机可能开放了TCP 22端口(SSH),但未启动SSH服务。可以显示该IP地址上的主机正在运行;系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态
-
filtered(被过滤的):表示 Nmap的探测报文因网络过滤机制被拦截,无法到达目标端口,导致无法确定端口是否开放。
-
unfiltered(未被过滤的):表示目标端口对Nmap的探测报文 可达且响应,但无法确定其开放(open)或关闭(closed)这种状态通常由 ACK扫描(-sA)触发,其技术逻辑如下:ACK扫描原理:向目标端口发送TCP ACK标志的数据包,根据响应类型判断防火墙规则:收到RST包:表明端口未被过滤(即unfiltered),但无法区分开放或关闭(因为无论端口状态如何,只要未被过滤,都可能返回RST)。
-
open|filtered(开放或者被过滤的):状态是Nmap扫描中的一种模糊判定结果,表示 无法明确区分端口是开放(open)还是被过滤(filtered)。其核心矛盾在于:开放但无响应:某些开放的端口可能因服务配置(如UDP服务不主动响应探测包)或网络策略(如防火墙仅允许特定流量)而保持沉默。过滤导致无响应:过滤设备(如防火墙、ACL规则)可能静默丢弃探测包,而非返回明确的ICMP错误
-
- 触发场景:
UDP扫描(-sU):UDP协议无连接特性导致多数服务不响应探测包,即使端口开放也可能无反馈。
特殊TCP扫描:如FIN扫描(-sF)、NULL扫描(-sN)、Xmas扫描(-sX)发送非标准标志位的包,可能被服务或防火墙忽略。
IP协议扫描(-sO):探测IP协议号时,若目标系统不支持或过滤特定协议,可能无响应
- 触发场景:
-
closed|filtered(关闭或者被过滤的):该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中(一种利用僵尸主机的间接扫描技术)。
端口扫描技术
端口扫描类型的选项格式是-s
-
-sS (TCP SYN扫描):Nmap的默认扫描方式,基于TCP协议的三次握手机制进行半开放连接探测,它向目标端口发送一个设置了SYN标志位的TCP数据包,模拟正常连接请求。仅完成前两步(SYN → SYN/ACK),不发送最终的ACK包,避免在目标系统日志中留下完整连接记录
-
-sT (TCP connect()扫描):当SYN扫描不能用时,CP Connect()扫描就是默认的TCP扫描。 核心机制是通过完整的三次握手建立连接,与常规网络应用(如浏览器)建立连接的方式完全一致
-
-sU (UDP扫描):通过发送无负载的UDP报文探测目标端口状态;开放端口(open):若目标服务返回有效UDP响应(如DNS查询应答),则端口标记为开放。但多数UDP服务仅在收到合法请求时响应。关闭端口(closed):若收到ICMP端口不可达错误(类型3,代码3),表明端口无服务监听。被过滤(filtered):若收到其他ICMP错误(类型3,代码1/2/9/10/13)或无响应,则端口可能被防火墙/过滤设备拦截。开放或被过滤(open|filtered):多次重试无响应时,Nmap无法明确区分端口状态,需结合版本探测(-sV)或脚本(如snmp-info)进一步验证。
-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描):这三种扫描(Null、FIN、Xmas)基于TCP协议RFC 793的特定行为设计,通过发送异常标志位组合的TCP包来区分端口状态:Null扫描(-sN):发送无任何标志位(Flags=0)的TCP包。FIN扫描(-sF):仅设置FIN标志位(Flags=FIN)。Xmas扫描(-sX):设置FIN、PSH、URG标志位(Flags=FIN+PSH+URG)端口关闭:目标返回RST包(根据RFC,关闭端口需对不含SYN/RST/ACK的包响应RST)。端口开放/被过滤:开放端口忽略异常包(无响应),或被防火墙过滤(可能返回ICMP错误,如类型3代码1-3、9-10、13)closed:收到RST。open|filtered:无响应或ICMP过滤错误。filtered:明确收到ICMP不可达错误。兼容性限制:有效系统:多数UNIX/Linux遵循RFC规范。* 无效系统:Windows、Cisco设备、IBM OS/400等不遵循RFC,无论端口状态均返回RST,导致误判为closed**
-
-sA (TCP ACK扫描):发送仅设置ACK标志位的TCP报文,通过分析目标响应推断防火墙的过滤策略和端口状态:未被过滤端口(unfiltered):无论端口实际开放(open)还是关闭(closed),只要未被防火墙拦截,均返回RST报文。此时Nmap标记为unfiltered,但无法进一步区分端口状态;被过滤端口(filtered):若无响应或收到ICMP不可达错误(类型3,代码1/2/3/9/10/13),则表明防火墙或过滤设备拦截了探测包;在内网渗透中,若SYN扫描显示某端口为filtered,使用ACK扫描可验证是防火墙拦截还是端口实际关闭。若ACK扫描结果为unfiltered,则表明防火墙仅过滤SYN包,可通过其他技术(如分片扫描)绕过;其价值在于揭示网络设备的过滤策略而非端口实际状态。
-
-sW (TCP窗口扫描):基于TCP协议栈实现差异的探测技术,其核心机制在于分析目标系统返回的RST响应包中的TCP窗口字段值,从而推断端口状态;开放端口(open):某些系统(如BSD系)在返回RST包时,若端口开放,其TCP窗口字段会设置为正数(例如1024或更高)。关闭端口(closed):若端口关闭,TCP窗口字段通常为0。RFC非规范行为:TCP协议未规定RST包的窗口字段值,因此该扫描依赖系统实现细节,属于非标准化技术。用于识别无状态防火墙规则。若ACK扫描显示unfiltered而窗口扫描标记为open,可推断防火墙未拦截ACK包,但实际端口开放
-
--scanflags (定制的TCP扫描):--scanflags 是 Nmap 中高度自定义的扫描选项,允许用户通过灵活组合 TCP 标志位设计独特的扫描行为,既能绕过传统入侵检测系统(IDS),又能测试目标设备对异常数据包的处理逻辑。
-
- 自定义 TCP 标志位:
通过 --scanflags 指定任意 TCP 标志位组合(URG/ACK/PSH/RST/SYN/FIN),突破固定扫描模式。例如:
--scanflags URGACKSYN:混合 URG、ACK、SYN 标志位,模拟特殊协议行为。
--scanflags RSTFIN:仅设置 RST 和 FIN,触发某些系统的非标准响应。
标志位的顺序不影响扫描结果,但需避免无意义的组合(如所有标志位全开),否则可能被 IDS 标记为异常流量
- 自定义 TCP 标志位:
-
- 基础扫描类型联动:
--scanflags 必须与基础扫描类型(如 -sS、-sF)配合使用,因为不同扫描类型对响应的解析逻辑不同:
SYN 扫描模式(-sS):若目标无响应,标记为 filtered(被过滤)。
FIN 扫描模式(-sF):若目标无响应,标记为 open|filtered(开放或过滤)。
例如:nmap --scanflags URG -sF 表示使用 FIN 扫描的响应逻辑,但发送带有 URG 标志位的探测包
目标系统兼容性问题:
RFC 非标准实现:部分系统(如 Windows)对所有非常规标志位均返回 RST,导致误判。
端口状态模糊性:无响应可能由过滤或开放引起,需配合其他扫描(如 -sV)验证
- 基础扫描类型联动:
-
-sI <zombie host[:probeport]> (Idlescan):Idle扫描(-sI)是一种基于旁路攻击的TCP端口盲扫描技术,其核心原理是利用僵尸主机(Zombie Host)的IPID(IP标识符)序列特性,间接探测目标端口的开放状态,从而实现完全隐蔽的扫描行为;IPID序列漏洞:某些系统(如老旧Windows、嵌入式设备)的IPID按固定步长(如+1)递增。通过分析僵尸机返回的IPID变化,可推断其是否被目标机触发响应。伪造源IP攻击目标:向目标端口发送SYN包,伪造源IP为僵尸机。若目标端口开放,会向僵尸机回复SYN/ACK,触发僵尸机回复RST(IPID+1);若端口关闭或过滤,则无响应。二次探测验证变化:再次探测僵尸机IPID,若增量大于1,表明僵尸机因目标响应而发送了额外数据包,从而推断目标端口状态。命令格式与参数:nmap -sI <Zombie_IP[:Port]> <Target_IP> ;:Port:指定僵尸机响应端口(默认80),需确保该端口在僵尸机开放且服务稳定
*** -sO (IP协议扫描):一种网络层协议探测技术,用于识别目标主机支持哪些IP层协议**(如TCP、ICMP、IGMP等)。其核心逻辑与传统端口扫描不同,它通过遍历IP协议号(0-255)而非TCP/UDP端口号进行探测。范围:扫描IP协议域的8位值(0-255),对应不同协议(如1=ICMP、6=TCP、17=UDP)数据包构造:发送不带应用层数据的IP报文头,仅声明协议类型。例外情况:TCP、UDP、ICMP协议需包含标准协议头,否则某些系统会拒绝响应
响应判定逻辑
开放协议(open):若目标返回任何协议相关的响应(如TCP SYN-ACK),则标记为开放。
关闭协议(closed):收到ICMP协议不可达错误(类型3,代码2)时标记为关闭。
过滤协议(filtered):若收到其他类型ICMP不可达错误(类型3,代码1/3/9/10/13),或未收到响应但确认ICMP协议开放,则标记为过滤。
不确定状态(open|filtered):重试后仍无响应时标记为开放或过滤,需结合其他扫描验证
参数使用规范:-p选项:指定扫描的协议号(如-p1,6,17扫描ICMP、TCP、UDP)
隐蔽探测:绕过应用层过滤规则,直接探测网络层漏洞(如IP分片攻击风险)
*** -sM (TCP Maimon扫描):基于非标准TCP标志位组合的隐蔽探测技术,其核心原理是通过发送带有特定标志位的探测包,利用目标系统协议栈实现的差异性推断端口状态。探测包构造:Maimon扫描发送的TCP报文包含FIN(结束连接)和ACK(确认响应)标志位的组合(即FIN/ACK)。这种组合在正常TCP通信中极少出现,通常用于异常连接的终止流程**。响应机制差异:RFC 793规范:根据TCP协议标准,无论目标端口是否开放,接收方都应返回RST(重置连接)包。BSD系统实现:实际测试中,Uriel发现BSD系操作系统(如FreeBSD、OpenBSD)对开放端口会静默丢弃FIN/ACK包,仅对关闭端口返回RST。这一行为成为Maimon扫描的判定依据;FIN/ACK组合常被误认为合法连接终止包,可规避基于SYN或ACK的过滤规则;仅对BSD系系统有效,Windows、Linux等主流系统仍遵循RFC规范返回RST,导致Maimon扫描无法区分开放与关闭端口
*** -b
命令语法:nmap -b [username:password@]ftp_server[:port] <目标IP>
ftp_server:需存在代理漏洞的FTP服务器地址,如未修复CVE-1999-0017的旧版本vsftpd或HP JetDirect设备。
username:password:可省略,若FTP支持匿名登录(默认anonymous:anonymous或空密码)。
port:默认21端口可省略,非标准端口需显式指定(如192.168.1.5:2100)
端口说明和扫描顺序
Nmap提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。 默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫描。
-
-p
(只扫描指定的端口):灵活格式支持:单端口:-p 22 ;连续范围:-p 1-1023(1到1023端口);混合模式:-p 22,80-100,U:53(TCP 22、80-100端口 + UDP 53端口);全端口扫描:-p-
:等价于 -p 1-65535 ;端口0支持:可通过 -p 0 扫描端口0(某些系统用于特殊协议);使用 T: 或 U: 前缀区分协议:nmap -sS -sU -p T:80,U:53 192.168.1.1 # SYN扫描TCP80 + UDP53 ; -
-F (快速 (有限的端口) 扫描):-F 会基于 nmap-services 文件中标记的高频端口列表进行扫描。该文件统计了互联网上常见服务的端口开放概率,默认包含约 1200 个 TCP 端口(如 HTTP 80、HTTPS 443、SSH 22 等),远少于全端口(65535 个)。通过 --datadir 指定自定义的 nmap-services 文件,可进一步精简扫描范围(例如仅包含企业内网常用端口),实现更极致的速度提升:
nmap -F --datadir /path/to/custom-nmap-services 192.168.1.1 -
-r (不要按随机顺序扫描端口):默认情况下,Nmap按随机顺序扫描端口 (除了出于效率的考虑,常用的端口前移)。这种随机化通常都是受欢迎的, 但您也可以指定-r来顺序端口扫描。
服务和版本探测
- -sV (版本探测):打开版本探测,是网络扫描中精准识别服务指纹的核心功能。 您也可以用-A同时打开操作系统探测和版本探测。
用于深度识别目标主机开放端口上运行的具体应用程序及其版本信息的核心功能。该模块通过主动与目标服务交互并分析响应特征,帮助用户构建精准的资产画像,是渗透测试、漏洞评估及网络资产管理的关键环节。
-
--allports (不为版本探测排除任何端口):Nmap版本探测(-sV)默认会跳过9100-9107 TCP端口,这是出于对打印机设备异常响应的防护。此类端口通常用于打印服务。这一行为由nmap-service-probes文件中的Exclude指令控制,该文件内置了需跳过的端口列表,避免因协议交互引发设备异常。通过添加--allports参数,用户可强制Nmap忽略所有Exclude指令,实现对全端口(包括9100-9107)的版本探测。
-
--version-intensity
(设置 版本扫描强度):map 的版本探测(-sV)通过多阶段协议交互实现服务指纹识别。其核心逻辑是向目标端口发送一系列定制化探测报文,分析响应特征并与内置的 nmap-service-probes 指纹库匹配。探测报文被赋予 1-9 的强度值,不同值对应不同深度的探测策略:低强度值(1-3):发送基础探测包,覆盖常见服务(如 HTTP、SSH、FTP)的通用协议请求,快速识别主流应用。高强度值(7-9):增加复杂探测包,针对小众协议(如工控系统、数据库私有协议)和模糊版本特征,提升识别精度但显著增加耗时。nmap-service-probes 文件中定义了端口的强制探测规则(如 ports 53 强制 DNS 探测)。这些规则不受 --version-intensity 影响 -
--version-light (打开轻量级模式):这是 --version-intensity 2的方便的别名。轻量级模式使 版本扫描快许多,但它识别服务的可能性也略微小一点。
-
--version-all (尝试每个探测):--version-intensity 9的别名, 保证对每个端口尝试每个探测报文。
-
--version-trace (跟踪版本扫描活动):这导致Nmap打印出详细的关于正在进行的扫描的调试信息。 它是您用--packet-trace所得到的信息的子集。
-
-sR (RPC扫描):对目标开放的TCP/UDP端口发送SunRPC协议的NULL命令请求。若端口运行RPC服务,则会返回包含程序号(Program Number)、版本号(Version)及协议类型的响应,类似于rpcinfo -p的输出;RPC扫描作为版本探测(-sV)的子功能自动启用,无需单独使用-sR。当启用-sV时,Nmap会同时执行RPC探测和其他协议识别。
操作系统探测
用TCP/IP协议栈fingerprinting进行远程操作系统探测。 Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特。 在进行一打测试如TCP ISN采样,TCP选项支持和排序,IPID采样,和初始窗口大小检查之后, Nmap把结果和数据库nmap-os-fingerprints中超过 1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。
-
-O (启用操作系统检测):也可以使用-A来同时启用操作系统检测和版本检测。通过分析目标主机的网络响应特征(如TCP/IP协议栈实现差异、ICMP响应等),匹配内置的操作系统指纹数据库,从而推测目标运行的操作系统类型及版本;
-
--osscan-limit (针对指定的目标进行操作系统检测):用于优化操作系统检测的效率,其核心作用是通过筛选目标主机的端口状态,仅对符合条件的有效目标执行操作系统检测,从而减少冗余操作。端口状态筛选:--osscan-limit 要求目标主机至少有一个开放的 TCP 端口和一个关闭的 TCP 端口。Nmap 通过分析这两个端口的不同响应模式(如序列号生成、窗口大小等),构建操作系统指纹并匹配数据库,从而提高检测准确性。跳过无效目标:若目标主机的所有端口均为开放或均为关闭状态,Nmap 将跳过该主机的操作系统检测,避免浪费时间和资源。必须与 -O 或 -A 联用:--osscan-limit 仅在启用操作系统检测(-O)或综合扫描(-A)时生效,单独使用无效。
-
--osscan-guess; --fuzzy (推测操作系统检测结果):当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效。
时间与性能
-
--min-hostgroup
; --max-hostgroup (调整并行扫描组的大小):Nmap具有并行扫描多主机端口或版本的能力,Nmap将多个目标IP地址空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果。如果组的大小定义 为50,则只有当前50个主机扫描结束后才能得到报告(详细模式中的补充信息 除外)。默认方式下,Nmap采取折衷的方法。开始扫描时的组较小,最小为5,这样便于尽快产生结果;随后增长组的大小,最大为1024。确切的 大小依赖于所给定的选项。为保证效率,针对UDP或少量端口的TCP扫描,Nmap 使用大的组。 -
--min-parallelism
; --max-parallelism (调整探测报文的并行度):控制单台主机上同时发送的探测报文数量,影响端口扫描或主机发现的并发强度。--min-parallelism :设置最低并发探测数,强制Nmap至少同时发送指定数量的探测包;--max-parallelism :设置最高并发探测数,限制Nmap在同一时间最多发送的探测包数量 -
--min-rtt-timeout
, --max-rtt-timeout , --initial-rtt-timeout (调整探测报文超时):--initial-rtt-timeout:设置初始超时值(默认较高,保守估计),用于首次探测时的等待时间。--max-rtt-timeout:设置最大允许的超时值,防止Nmap在网络波动时过度延长等待。--min-rtt-timeout:设置最小超时值(极少使用),仅在网络极度不可靠时强制降低超时阈值。 -
--host-timeout
(放弃低速目标主机):通常使用1800000 来保证Nmap不会在单个主机上使用超过半小时的时间。需要注意的是,Nmap在这半小时中可以 同时扫描其它主机,因此并不是完全放弃扫描。超时的主机被忽略,因此也没有针对该主机的端口表、操作系统检测或版本检测结果的输出。 -
--scan-delay
; --max-scan-delay (调整探测报文的时间间隔):用于控制探测报文发送的时间间隔,核心作用是通过调整扫描节奏优化性能或规避安全检测。--scan-delay:强制设置每次探测之间的最小等待时间(单位毫秒),例如设置为1000时,Nmap在发送每个探测包后至少等待1秒。这适用于网络带宽受限或目标主机限制响应速率的场景。例如,Solaris系统对UDP扫描的ICMP响应速率限制为每秒1次,若Nmap发送过快会导致大量无效探测;--max-scan-delay:设定动态调整的最大延迟上限,防止Nmap因自动适应网络状况而过度延长等待时间。例如,当目标主机触发速率限制时,Nmap可能自动增加延迟,但通过--max-scan-delay 500可强制限制最大延迟为500毫秒;--scan-delay的另一个用途是躲闭基于阈值的入侵检测和预防 系统(IDS/IPS)。 -
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (设置时间模板):Nmap提供了一些简单的 方法,使用6个时间模板,使用时采用-T选项及数字(0 - 5) 或名称。模板名称有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。前两种模式用于IDS躲避,Polite模式降低了扫描 速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速 扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。若同时使用模板与其他优化参数(如--scan-delay),模板必须在命令行中先声明,否则其默认值会覆盖用户定义。
防火墙/IDS躲避和哄骗
-
-f (报文分段); --mtu (使用指定的MTU):-f选项:强制将TCP/IP报文拆分为多个8字节或更小的片段(每个片段独立携带IP头)。例如,20字节的TCP头被拆分为3个包(8+8+4字节),每个分片独立传输。--mtu选项:自定义MTU(最大传输单元)值,偏移量必须是8的倍数(如--mtu 64),允许更灵活控制分片大小,无需依赖-f的固定分段策略。绕过检测逻辑:防火墙/IDS的盲点:传统安全设备通常仅检测完整报文,而忽略分片重组。分片后的报文因缺乏完整协议头特征(如TCP标志位),可能被误判为无害流量。分片路由不确定性:分片可能通过不同路径到达目标,导致安全设备无法完整捕获所有分片进行重组分析
-
-D <decoy1 [,decoy2][,ME],...> (使用诱饵隐蔽扫描):Nmap的-D(诱饵扫描)是一种通过伪造多个虚假扫描源来混淆防火墙/IDS检测的高级规避技术。流量伪装机制Nmap在发送探测包时,同时生成多个伪造源IP的探测包(诱饵包),与真实扫描包混合发送到目标主机。目标主机的防火墙或IDS会同时记录所有探测来源IP,但无法快速识别真实扫描源,需逐个验证每个IP的合法性。真实扫描源会监听目标主机的响应,而诱饵IP由于未实际发送请求,不会触发响应。Nmap通过过滤无响应的IP(诱饵)来确认真实开放的端口。ME参数:将真实IP随机插入诱饵列表(默认)或指定位置(如第6位),降低被scanlogd等工具标记的概率。若未使用ME,Nmap默认随机排列诱饵顺序,增加分析难度。使用RND:[数量]生成随机诱饵(如-D RND:5),防止固定模式被识别。通过僵尸主机(-sI)转发诱饵流量,完全隐匿真实IP。
-
-S <IP_Address> (源地址哄骗):用于伪造扫描流量的源IP地址,从而实现身份隐匿、规避检测或混淆目标系统的日志记录。机制:Nmap通过修改IP报文的源地址字段,将真实IP替换为指定值(如-S 203.0.113.5),使目标主机将响应发送至伪造的IP地址。底层依赖:需配合-e参数指定发送接口(如-e eth0),确保伪造报文从正确网卡发出。若未指定接口且Nmap无法自动检测源地址,会触发错误提示。目标主机会向伪造的源IP发送响应(如SYN/ACK),但因真实扫描源未监听该IP的响应,Nmap无法直接获取端口状态信息,扫描报告可能不完整。可结合-Pn跳过主机发现阶段,直接假设目标在线,避免因无响应导致扫描中止。伪造他人IP进行扫描可能涉及非法侵入或嫁祸行为,需确保在授权测试范围内使用。
-
-e
(使用指定的接口):告诉Nmap使用哪个接口发送和接收报文,Nmap可以进行自动检测, 如果检测不出会给出提示。 -
--source-port
; -g (源端口哄骗):一种利用网络设备信任特定源端口的配置漏洞,实现防火墙/IDS规避的技术。误判风险:攻击者可伪造源端口为"可信端口",使恶意流量被误认为合法服务数据。命令格式:nmap -g 53 或 nmap --source-port 53,强制Nmap从指定端口发送探测包;协议支持:适用于SYN扫描(-sS)、UDP扫描(-sU),但DNS请求因依赖系统库无法欺骗。 -
--data-length
(发送报文时 附加随机数据):正常情况下,Nmap发送最少的报文,只含一个包头。因此TCP包通常 是40字节,ICMP ECHO请求只有28字节。这个选项告诉Nmap在发送的报文上 附加指定数量的随机字节。操作系统检测(-O)包不受影响, 但大部分ping和端口扫描包受影响,这会使处理变慢,但对扫描的影响较小。 -
--ttl
(设置IP time-to-live域):用于设置IPv4数据包的Time To Live(TTL)字段值,其核心功能与网络探测和规避安全检测密切相关。表示数据包在网络中最多可经过的路由器跳数。每经过一个路由器,TTL值减1。若TTL降为0,路由器将丢弃该数据包并返回ICMP超时消息(Type 11)作用:某些防火墙会过滤TTL值异常的数据包(如仅允许TTL>30的流量)。通过调整TTL值,可绕过此类规则。模仿其他系统的TTL指纹(如将TTL设为64伪装成Linux主机),降低扫描行为被识别的概率;限制数据包传播范围:设置极低TTL(如--ttl 3),使数据包仅能在局域网内传播,避免被外部监控设备记录。 -
--randomize-hosts (对目标主机的顺序随机排列):用于规避网络监控和防火墙检测的高级技术,其核心原理是通过打乱目标主机的扫描顺序,使扫描流量难以被识别为自动化攻击行为。防火墙和入侵检测系统(IDS)通常通过流量模式识别来发现异常扫描。例如,连续按顺序扫描192.168.1.1到192.168.1.100的IP地址,会形成明显的线性递增模式,触发安全设备的告警规则--randomize-hosts通过将目标主机顺序完全随机化(如先扫描192.168.1.55,再跳至192.168.1.23),使扫描流量呈现非连续性,模拟正常用户访问的随机性,从而绕过基于行为分析的防御机制。
-
--spoof-mac <mac address,prefix,or vendor name> (MAC地址哄骗):伪造数据链路层的MAC地址实现网络流量伪装;全随机模式:0作为参数时,Nmap会生成完全随机的48位MAC地址(如3A:7B:12:8E:F0:9C),这种模式无法被追踪到设备厂商信息,适用于高度匿名场景。OUI前缀模式:当参数为厂商名(如Apple、Cisco),Nmap会从内置数据库nmap-mac-prefixes中提取该厂商的3字节OUI(组织唯一标识符),后3字节随机生成(如Apple对应00:16:CB前缀,生成00:16:CB:8A:3D:FF)。这种模式可伪装成特定品牌设备,绕过基于厂商白名单的过滤规则。该参数强制Nmap发送原始以太网帧(需--send-eth支持),直接操控二层协议头部。相较于IP层欺骗,MAC地址伪造更贴近物理网络设备行为,能规避仅监控三层及以上协议的安全设备。
输出
-
-oN
(标准输出):将 Nmap 的扫描结果(包括开放的端口、服务版本、操作系统猜测等)以纯文本格式写入文件。 -
-oX
(XML输出):用于将扫描结果输出为 结构化 XML 格式 -
-oS
(ScRipT KIdd|3 oUTpuT):主要用作技术演示或幽默目的,而非实际功能需求。 -
-oG
(Grep输出):用于生成 Grepable(可 grep 的)输出格式,这是一种简化、面向命令行工具处理的文本格式,专为快速筛选和提取扫描结果而设计。 -
-oA (输出至所有格式):可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在 .nmap,.xml和 .gnmap文件中。
-
-oJ(JSON)格式。
-
-v (提高输出信息的详细度):用于动态提升扫描过程中的信息输出粒度,帮助用户实时监控扫描进度、调试问题或获取更全面的结果报告。
-
-vv(Level 2):高级详细模式:增加底层协议交互和决策逻辑。 可能生成极冗长的日志(尤其配合--packet-trace时),建议重定向到文件:使用-oA(全格式输出)时,-v 仅影响文本格式(.nmap),XML/JSON 不受影响。
-
-d [level] (提高或设置调试级别):用于输出底层技术细节,旨在帮助开发者或高级用户诊断扫描过程中的异常行为(如程序挂起、协议交互故障)。与 -v(详细模式)不同,-d 专注于暴露 Nmap 内部工作机制的原始数据,而非用户友好的进度报告。
-
--packet-trace (跟踪发送和接收的报文):用于实时显示扫描过程中发送和接收的所有网络数据包的摘要信息,是深入理解 Nmap 工作原理或调试网络问题的关键工具。
* * 启用后,Nmap 会打印每个发送(SENT)和接收(RCVD)的数据包关键信息,包括:
协议类型(TCP/UDP/ICMP)
源/目标IP和端口
协议标志(如TCP的SYN/ACK/RST)
时间戳和响应延迟 -
--iflist (列举接口和路由):输出Nmap检测到的接口列表和系统路由,用于调试路由 问题或设备描述失误(如Nmap把PPP连接当作以太网对待)。
显示所有检测到的网络接口(如以太网、Wi-Fi、VPN隧道),包括:
接口名称(如 eth0、wlan0)
MAC地址(物理地址)
IPv4/IPv6地址
网络类型(如以太网、PPP、回环)
系统路由表
列出内核路由表中的主要条目,包括:
目标网络(如 0.0.0.0/0 表示默认路由)
网关地址
使用的接口
跃点数(Metric)
-
--append-output (在输出文件中添加):将结果添加在现有文件后面,使用--append-output选项。所有指 定的输出文件都被添加。但对于XML(-oX)扫描输出文件无效,无法正常解析,需要手工修改。
-
--resume
(继续中断的扫描):用于从中断的扫描中恢复并继续执行,避免重新扫描已完成的目标:
原始命令(已中断)
nmap -oX scan.xml -p 1-65535 10.0.0.0/16
恢复命令
nmap --resume scan.xml
-
--stylesheet
(设置XSL样式表,转换XML输出):为 XML 格式的扫描结果(-oX)关联 XSL样式表,从而将原始 XML 数据转换为更易读的 HTML 可视化报告。 -
--no-stylesheet (忽略XML声明的XSL样式表):使用该选项禁止Nmap的XML输出关联任何XSL样式表。 xml-stylesheet指示被忽略。
其它选项
-
-6 (启用IPv6扫描)
-
-A (激烈扫描模式选项):这个选项启用了 -sV(服务版本探测)-O(操作系统检测)--script=default(默认 NSE 脚本)--traceroute(路由追踪)--osscan-limit(限制 OS 检测目标)
-
--datadir
(说明用户Nmap数据文件位置):于指定自定义的 Nmap 数据文件目录,替代默认的安装路径。这些数据文件包含扫描依赖的关键数据库和脚本 -
--send-eth (使用原以太网帧发送):核心作用是让 Nmap 绕过操作系统协议栈,直接控制数据链路层的帧构造与发送。受系统路由和防火墙规则限制。--send-eth 模式:直接构造并发送二层的以太网帧(包含 MAC 头),完全绕过 IP 层控制,实现更底层的网络交互。网络范围限制:仅在同一局域网内有效,无法跨越路由器
-
--send-ip (在原IP层发送):要求Nmap通过原IP套接字发送报文,而不是低层的以 太网帧。这是--send-eth选项的补充。默认情况下,Nmap会根据运行平台选择最适合的方式发送数据包。在UNIX系统中,通常使用原IP套接字,而在Windows系统中,由于Microsoft禁用了原套接字支持,通常使用以太网帧。--send-ip选项允许用户强制Nmap使用原IP套接字发送数据包,即使在通常会使用以太网帧的情况下。在局域网环境下,Nmap默认使用ARP进行主机发现,因为这种方式更快、更可靠。然而,如果用户希望发送IP请求包而不是ARP包,可以使用--send-ip选项。
-
-V; --version (打印版本信息):打印Nmap版本号并退出。
-
-h; --help (打印帮助摘要面):打印一个短的帮助屏幕,列出大部分常用的 命令选项,这个功能与不带参数运行Nmap是相同的。
-
--privileged (假定用户具有全部权限):假定特权权限:默认情况下,Nmap会检查其运行权限,如果发现没有足够的权限(例如,不是以root用户身份运行),它会退出。使用--privileged选项可以告诉Nmap假定它具有足够的权限,即使实际权限可能不足。在Linux系统中,如果系统配置允许非特权用户进行原报文扫描,可以使用--privileged选项让Nmap执行需要特权的操作,而无需以root用户身份运行。
运行时的交互
-
v / V:增加 / 减少细节
-
d / D:提高 / 降低调试级别
-
p / P:打开/ 关闭报文跟踪
实例
下面给出一些实例,简单的、复杂的到深奥的。为更具体,一 些例子使用了实际的IP地址和域名。在这些位置,可以使用你自己网络 的地址/域名替换。注意,扫描其它网络不一定合法,一些网络管理员不愿看到 未申请过的扫描,会产生报怨。因此,先获得允许是最好的办法。
如果是为了测试,scanme.nmap.org 允许被扫描。但仅允许使用Nmap扫描并禁止测试漏洞或进行DoS攻击。为 保证带宽,对该主机的扫描每天不要超过12次。如果这个免费扫描服务被 滥用,系统将崩溃而且Nmap将报告解析 指定的主机名/IP地址失败:scanme.nmap.org。这些免 费扫描要求也适用于scanme2.nmap.org、 scanme3.nmap.org等等,虽然这些 主机目前还不存在。
nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。
nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限。
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。
nmap -v -iR 100000 -P0 -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表。
nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。
host -l company.com | cut -d -f 4 | nmap -v -iL -
进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。上述命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令。
注解:
RST 报文(Reset)
定义:RST 是 TCP 报文中的一个标志位,表示“重置连接”(Reset)。
ACK 报文
在三次握手过程中,客户端收到服务器的 SYN-ACK 报文后,会发送一个 ACK 报文,表示确认连接已经建立。
IP ID Idle扫描的局限性:间接探测:攻击者通过僵尸主机向目标发送探测包,通过观察僵尸机IP ID值的增量变化判断目标端口是否响应。若IP ID未变化,Nmap无法确定是目标端口关闭(返回RST)还是过滤设备拦截(无响应)。误判风险:僵尸机本身的网络环境(如防火墙策略、丢包率)会显著影响扫描结果,导致closed|filtered状态的频繁出现。
TCP Connect扫描(connect()扫描)通过操作系统提供的connect()系统调用完成完整的TCP三次握手:向目标端口发送SYN包、若收到SYN/ACK响应,则继续发送ACK完成连接,标记端口为开放、若收到RST包或无响应,标记端口为关闭或被过滤、
FTP Bounce扫描(FTP弹跳扫描):FTP Bounce扫描(-b)是一种利用FTP协议漏洞的间接扫描技术。其流程为:连接到存在漏洞的FTP服务器(如支持PORT命令的匿名FTP服务)、通过PORT命令将目标主机的IP和端口信息发送给FTP服务器、要求FTP服务器向目标端口发起文件传输请求、根据FTP服务器的错误响应(如"550 Permission denied")推断目标端口状态

浙公网安备 33010602011771号