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 标记为异常流量
    • 基础扫描类型联动​​:
      --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 (FTP弹跳扫描):**一种​​利用FTP协议代理漏洞的间接扫描技术​​,其核心逻辑是通过中间FTP服务器(称为“跳板”或“代理”)间接探测目标主机的端口状态。​​FTP代理漏洞利用​:FTP协议规范(RFC 959)允许用户通过PORT命令指定第三方服务器的IP和端口,要求FTP服务器将文件发送至该地址。Nmap利用此特性,构造特殊请求使FTP服务器向目标主机发送探测包;若目标端口开放,FTP服务器会尝试建立数据连接,但因无实际文件传输而返回错误(如550 Failed to open file)。目标端口关闭时,FTP服务器会收到Connection refused错误(ICMP类型3代码3),并将此信息反馈给Nmap;
命令语法: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")推断目标端口状态

posted @ 2025-04-14 15:16  --豆腐西施--  阅读(221)  评论(0)    收藏  举报