Nmap: 网络探索工具和安全/端口扫描器!从入门到醒目!全网最全详细教程指 ...

打印 上一主题 下一主题

主题 1005|帖子 1005|积分 3015



简介

Nmap(网络映射器)是一款用于网络发现和安全审计的网络安全工具,在其初次发布后的前几年之间是 GPL 自由软件,但最近版本的 nmap 是否是 FOSS 自由软件还存在很多质疑和争议。软件名字Nmap是Network Mapper的简称。通常情况下,Nmap用于:


  • 列举网络主机清单
  • 管理服务升级调度
  • 监控主机
  • 服务运行状况
Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务范例及版本信息、侦测操作系统与装备范例等信息。 它是网络管理员必用的软件之一,用以评估网络系统安全。
Nmap是不少黑客及脚本小子爱用的工具 。系统管理员可以利用Nmap来探测工作情况中未经批准使用的服务器,黑客通常会利用Nmap来搜集目标电脑的网络设定,从而计划攻击的方法。
Nmap通常用在信息搜集阶段,用于搜集目标机主机的根本状态信息。扫描结果可以作为漏洞扫描、漏洞利用和权限提升阶段的输入。例如,业界流行的漏洞扫描工具Nessus与漏洞利用工具Metasploit都支持导入Nmap的XML格式结果,而Metasploit框架内也集成了Nmap工具(支持Metasploit直接扫描)。
Nmap不但可以用于扫描单个主机,也可以实用于扫描大规模的盘算机网络(例如,扫描英特网上数万台盘算机,从中找出感兴趣的主机和服务)。 
焦点功能

主机发现

用于发现目标主机是否处于活动状态。
Nmap 提供了多种检测机制,可以更有效地辨识主机。例如可用来列举目标网络中哪些主机已经开启,类似于Ping命令的功能。
端口扫描

用于扫描主机上的端口状态。
Nmap可以将端口识别为开放(Open)、关闭(Closed)、过滤(Filtered)、未过滤(Unfiltered)、开放或过滤(Open|Filtered)、关闭或过滤(Closed|Filtered)。默认情况下,Nmap会扫描1660个常用的端口[6],可以覆盖大多数根本应用情况。
版本侦测

用于识别端口上运行的应用程序与程序版本。
Nmap现在可以识别数千种应用的署名(Signatures),检测数百种应用协议。而对于不识别的应用,Nmap默认会将应用的指纹(Fingerprint)打印出来,假如用户确知该应用程序,那么用户可以将信息提交到社区,为社区做贡献。
操作系统侦测

用于识别目标主机的操作系统范例、版本编号及装备范例。
Nmap现在提供1500个操作系统或装备的指纹数据库[7],可以识别通用PC系统、路由器、互换机等装备范例。
防火墙/IDS规避和哄骗

Nmap提供多种机制来规避防火墙、IDS的的屏蔽和检查,便于秘密地探查目标主机的状况。
根本的规避方式包括:数据包分片、IP诱骗、IP伪装、MAC地址伪装。
NSE脚本引擎

NSE是Nmap最强大最灵活的特性之一,可以用于增强主机发现、端口扫描、版本侦测和操作系统侦测等功能,还可以用来扩展高级的功能如web扫描、漏洞发现和漏洞利用等。Nmap使用Lua语言来作为NSE脚本语言,现在的Nmap脚本库已经支持350多个脚本。 
安装

Windows

Nmap 支持 Microsoft Windows二进制文件(.exe)。即Windows平台的应用程序。可实行的自动安装程序提供,此中包括NMAP的依靠项和Zenmap GUI。支持Windows 7和更新的NMAP,以及Windows Server 2008 R2以及更新。
安装链接:https://nmap.org/dist/nmap-7.95-setup.exe
Mac OS X

Nmap 支持 Mac OS X二进制文件。Apple MacOS(X86-64)的NMAP二进制文件分布为磁盘图像文件 包含一个安装程序。安装程序答应安装nmap,zenmap, NCAT和NDIFF。这些程序已在 Mac OS X 10.9及以后。 
安装链接:https://nmap.org/dist/nmap-7.95.dmg
Linux

Nmap 支持Linux RPM源和二进制文件。很多流行的Linux发行版(RedHat,Mandrake,Suse等)都使用 系统 RPM 软件包管理 快速简便的二进制包装安装。
安装链接:https://nmap.org/dist/nmap-7.95-3.x86_64.rpm
源码安装

通过一下命令举行克隆项目源码。建议请先提前挂好署理举行克隆。
  1. git clone https://github.com/nmap/nmap.git
复制代码

进入目录并查看
  1. cd nmap/
  2. ls
复制代码

天生 Makefile 文件
  1. ./configure
复制代码

使用 make 举行编译
  1. make
复制代码

安装
  1. sudo make install
复制代码

输入以下命令,假如出现这个界面就说明安装乐成了。
  1. nmap -h
复制代码
 

APT包管理器安装

Kali Linux 默认已经安装好 nmap 工具了。也可以通过一下命令来举行安装。
  1. sudo apt install nmap
复制代码
Nmap

1. -h

资助信息
  1. nmap -h
复制代码
 

2. 通例使用

语法:nmap [扫描范例...] [选项] {扫描目标说明}
  1. nmap 192.168.174.134
复制代码

  1. nmap -A -T4 scanme.nmap.org playground
复制代码
 

目标说明

可以传递主机名、IP 地址、网络等。
例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
3. -iL <inputfilename> 

从主机/网络列表中输入
<inputfilename> 中读取目标说明。在命令行输入一堆主机名显得很鸠拙,然而常常需要如许。 例如,您的DHCP服务器可能导出10,000个当前租约的列表,而您盼望对它们举行扫描。假如您不是使用未授权的静态IP来定位主机,或许您想要扫描所有IP地址。只要天生要扫描的主机的列表,用 -iL 把文件名作为选项传给Nmap。列表中的项可以是Nmap在命令行上接受的任何格式(IP地址,主机名,CIDR,IPv6,或者八位字节范围)。 每一项必须以一个或多个空格,制表符或换行符分开。 假如您盼望Nmap从标准输入而不是现实文件读取列表, 您可以用一个连字符(-)作为文件名。
让nmap扫描文件内里的ip地址。
  1. nmap -iL host_file.txt
复制代码

4. -iR <num hosts> 

选择随机目标
对于互联网范围内的调查和研究, 您大概想随机地选择目标。<num hosts> 选项告诉 Nmap天生多少个IP。不合需要的IP如特定的私有,组播或者未分配的地址自动 略过。选项 0 意味着永无休止的扫描。记着,一些网管对于未授权的扫描可能会很感冒并加以抱怨。 使用该选项的结果自尊! 假如在某个雨天的下午,您以为实在无聊, 试试这个命令nmap -sS -PS80 -iR 0 -p 80随机地找一些网站欣赏。
随机扫描100个ip地址。
  1. nmap -iR 100
复制代码

永无休止的扫描。可以按Ctrl + C 制止扫描。
  1. nmap -iR 0
复制代码

5. --exclude <host1[,host2][,host3],...>

清除主机/网络
假如在您指定的扫描范围有一些主机或网络不是您的目标, 那就用该选项加上以逗号分隔的列表清除它们。该列表用正常的Nmap语法, 因此它可以包括主机名,CIDR,八位字节范围等等。 当您盼望扫描的网络包含实行关键任务的服务器,已知的对端口扫描反应强烈的 系统或者被其它人看管的子网时,这大概有用。
扫描ip地址为192.168.174.133到192.168.174.145,但清除ip地址192.168.174.134
  1. nmap --exclude 192.168.174.134 192.168.174.133-145
复制代码

6. --excludefile <excludefile>

清除文件中的列表
这和 --exclude 选项的功能一样,只是所清除的目标是用以 换行符,空格,或者制表符分隔的 <excludefile> 提供的,而不是在命令行上输入的。
清除文件可能包含以#开头并扩展到行末了的解释。
扫描ip地址为192.168.174.133到192.168.174.145,但清除ip地址为 excludefile.txt 文件内里的ip地址。
  1. nmap --excludefile excludefile.txt 192.168.174.133-145
复制代码

7. --resolve-all

扫描每个已剖析的地址
假如主机款式标剖析为多个地址,则扫描所有地址。默认行为是仅扫描第一个已剖析的地址。无论怎样,只会扫描适当地址系列中的地址:默认为 IPv4,IPv6 为 -6
  1. nmap --resolve-all 192.168.174.145
复制代码

8. --unique

每个地址仅扫描一次
每个 IP 地址仅扫描一次。默认行为是按照目标列表中指定的次数扫描每个地址,例如当网络范围重叠或不同的主机名剖析为同一地址时。
  1. nmap --unique 192.168.174.134
复制代码
 

9. --system-dns

使用系统 DNS 剖析器
默认情况下,Nmap 通过将查询直接发送到主机上配置的名称服务器,然后监听相应来反向剖析 IP 地址。很多请求(通常数十个)并行实行以进步性能。指定此选项以使用您的系统剖析器(通过 getnameinfo 调用一次一个 IP)。除非您发现 Nmap 并行剖析器中的错误(假如您发现,请告诉我们),否则这会比力慢而且很少有用。系统剖析器始终用于正向查找(从主机名获取 IP 地址)。
  1. nmap --system-dns 192.168.174.145
复制代码
 

10. --dns-servers <server1>[,<server2>[,...]]

用于反向 DNS 查询的服务器
默认情况下,Nmap 从 resolv.conf 文件(Unix)或注册表(Win32)确定您的 DNS 服务器(用于 rDNS 剖析)。或者,您可以使用此选项指定备用服务器。假如您使用 --system-dns,则不支持此选项。使用多个 DNS 服务器通常更快,特别是假如您为目标 IP 空间选择权威服务器。此选项还可以进步隐蔽性,因为您的请求可以从互联网上几乎任何递归 DNS 服务器反弹。
此选项在扫描私有网络时也很有用。有时只有少数名称服务器提供精确的 rDNS 信息,您甚至可能不知道它们在哪里。您可以扫描网络以查找端口 53(可能使用版本检测),然后实验 Nmap 列表扫描(-sL),使用 --dns-servers 一次指定一个名称服务器,直到找到一个有效的服务器。
假如 DNS 相应超出 UDP 数据包的巨细,则此选项可能不受支持。在这种情况下,我们的 DNS 剖析器将尽最大努力从截断的数据包中提取相应,假如不乐成,它将回退到使用系统剖析器。此外,包含 CNAME 别名的相应将回退到系统剖析器。
  1. nmap --dns-servers 8.8.8.8,114.114.114.114 192.168.174.135
复制代码
 

主机发现

11. -sL

列表扫描 - 仅列出要扫描的目标
列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机。默认情况下,Nmap仍然对主机举行反向域名剖析以获取它们的名字。简朴的主机名能给出的有用信息常常令人惊讶。例如, fw.chi.playboy.com是花花公子芝加哥办公室的防火墙。Nmap末了还会报告IP地址的总数。列表扫描可以很好的确保您拥有精确的目标IP。 假如主机的域名出乎您的料想,那么就值得进一步检查以防错误地扫描其它组织的网络。
既然只是打印目标主机的列表,像其它一些高级功能如端口扫描,操作系统探测或者Ping扫描的选项就没有了。假如您盼望关闭ping扫描而仍然实行如许的高级功能,请继续阅读关于 -Pn选项的先容。
对ip地址192.168.174.128到145举行列表扫描
  1. nmap -sL 192.168.174.128-145
复制代码

12. -sn

Ping 扫描 - 禁用端口扫描
该选项指示 Nmap 在主机发现后不实行端口扫描,而仅打印出相应主机发现探测的可用主机。这通常被称为“ping 扫描”,但你也可以请求运行 traceroute 和 NSE 主机脚本。默认情况下,它比列表扫描(list scan)更具侵入性一步,而且通常可以用于相同的目标。它答应对目标网络举行轻量级侦探,而不会引起太多注意。对于攻击者来说,了解有多少主机在线,比仅仅获取列表扫描提供的所有 IP 和主机名更有代价。
系统管理员也常常发现该选项很有用。它可以轻松用于盘算网络上的可用装备数量或监控服务器的可用性。这通常被称为 ping 扫描(ping sweep),比向广播地址发送 ping 更可靠,因为很多主机不会相应广播查询。
默认情况下,使用 -sn 举行的主机发现包括 ICMP 回显请求(ping)、TCP SYN(端口 443)、TCP ACK(端口 80)和 ICMP 时间戳请求。假如是非特权用户实行扫描,则仅会向目标的端口 80 和 443 发送 SYN 数据包(使用 connect() 举行连接)。假如特权用户在本地以太网网络上扫描目标,则会使用 ARP 请求,除非指定了 --send-ip 选项。
-sn 选项可以与任何主机发现探测范例(-P* 选项)联合使用,以获得更大的灵活性。假如使用了任何探测范例或端口号选项,则默认的探测方式将被覆盖。当 Nmap 运行所在主机与目标网络之间存在严格的防火墙时,建议使用这些高级技术,否则可能会因防火墙丢弃探测包或相应而漏掉某些主机。
在 Nmap 之前的版本中,-sn 选项曾被称为 -sP
对ip地址 192.168.174.132 举行 Ping 扫描。
  1. nmap -sn 192.168.174.132
复制代码

13. -Pn

无ping,将所有主机视为在线 - 跳过主机发现
此选项会完全跳过主机发现阶段。通常,Nmap 会在此阶段确定活动的主机,以举行更深入的扫描,并评估网络速度。默认情况下,Nmap 仅对被确认在线的主机实行更深入的探测(如端口扫描、版本检测或操作系统检测)。假如使用 -Pn 禁用主机发现,Nmap 会对命令行指定的每个目标 IP 地址实行请求的扫描功能,而不管其是否在线。例如,假如指定了一个 /16 网络范围,Nmap 将扫描所有 65,536 个 IP 地址。
-Pn 的行为类似于列表扫描(list scan),但不同之处在于,它不会在打印目标列表后制止,而是继续实行请求的扫描任务,假设每个目标 IP 都是活动的。由于默认的扫描时间参数会被应用,这可能会导致扫描速度变慢。假如盼望跳过主机发现端口扫描,但仍然运行 NSE(Nmap Scripting Engine),可以同时使用 -Pn -sn 选项。
对于本地以太网网络上的呆板,仍然会实行 ARP 扫描(除非使用 --disable-arp-ping--send-ip 选项禁用),因为 Nmap 需要获取 MAC 地址 以进一步扫描目标主机。
在 Nmap 早期版本中,-Pn 选项曾被称为 -P0-PN
对ip地址 192.168.174.128 到145举行无 Ping 扫描。
  1. nmap -Pn 192.168.174.128-145
复制代码

14. -Ps [portlist]

TCP SYN Ping - 对给定端口的 TCP SYN发现
此选项发送一个设置了 SYN 标志的空 TCP 数据包。默认的目标端口是 80(可在编译时通过修改 nmap.h 中的 DEFAULT_TCP_PROBE_PORT_SPEC 举行配置)。可以使用参数指定其他端口,语法与 -p 选项相同,但不能使用端口范例说明符(如 T:)。例如:-PS22 或 -PS22-25,80,113,1050,35000。注意,-PS 和端口列表之间不能有空格。假如指定了多个探测端口,它们将被并行发送。  
SYN 标志表现向长途系统请求建立连接。通常情况下,目标端口假如关闭,会返回 RST(重置)数据包;假如端口开放,目标机会相应 SYN/ACK(TCP 三次握手的第二步)。运行 Nmap 的主机在收到 SYN/ACK 后,会返回 RST 制止连接,而不是发送 ACK 完成三次握手。这个 RST 由内核自动发送,而非 Nmap 自行发送。  
Nmap 不关心端口是否开放,而是根据 RST 或 SYN/ACK 的相应判断主机是否在线。  
在 Unix 系统上,只有 root 用户通常可以发送和吸收原始 TCP 数据包。对于非特权用户,Nmap 会自动调用 connect 作为替换方案,每个目标端口都会实验建立连接。假如 connect 快速返回乐成或失败(ECONNREFUSED),说明主机在线;假如连接实验挂起直到超时,则主机被视为离线。
对ip举行80端口的SYN Ping扫描。
  1. nmap -PS 80 192.168.174.145
复制代码

对ip举行22,23,80,113,1050,35000端口的SYN Ping扫描。
  1. nmap -PS22,23,80,113,1050,35000 192.168.174.145
复制代码

15. -PA [portlist]

TCP ACK Ping - 对给定端口的 TCP ACK发现
TCP ACK ping和刚才讨论的SYN ping相当类似。 大概您已经猜到了,区别就是设置TCP的ACK标志位而不是SYN标志位。 ACK报文表现确认一个建立连接的实验,但该连接尚未完全建立。 所以长途主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的呆板,假如它们正在运行的话。
-PA选项使用和SYN探测相同的默认端口(80),也可以 用相同的格式指定目标端口列表。假如非特权用户实验该功能, 或者指定的是IPv6目标,前面说过的connect()方法将被使用。 这个方法并不完善,因为它现实上发送的是SYN报文,而不是ACK报文。
提供SYN和ACK两种ping探测的缘故原由是使通过防火墙的机会尽可能大。 很多管理员会配置他们的路由器或者其它简朴的防火墙来封锁SYN报文,除非 连接目标是那些公开的服务器像公司网站或者邮件服务器。 这可以制止其它进入组织的连接,同时也答应用户访问互联网。 这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器 广泛支持。Linux Netfilter/iptables 防火墙软件提供方便的 --syn选项来实现这种无状态的方法。 当如许的无状态防火墙规则存在时,发送到关闭目标端口的SYN ping探测 (-PS) 很可能被封锁。这种情况下,ACK探测格外有闪光点,因为它恰好利用了 如许的规则。
另外一种常用的防火墙用有状态的规则来封锁非预期的报文。 这一特性已开始只存在于高端防火墙,但是这些年类它越来越普遍了。 Linux Netfilter/iptables 通过 --state选项支持这一特性,它根据连接状态把报文 举行分类。SYN探测更有可能用于如许的系统,由于没头没脑的ACK报文 通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS又指定-PA来即发送SYN又发送ACK。
  1. nmap -PA 192.168.174.145
复制代码

16. -PU [portlist]

需要root权限
UDP Ping - 对给定端口的UDP发现
另一种主机发现方法是 UDP Ping,它向指定端口发送 UDP 数据包。对于大多数端口,Nmap 发送的是空数据包,但某些端口会使用特定协议的负载,以进步目标主机相应的可能性。这些负载与 Nmap 服务和版本探测中使用的探测数据相同,定义在 nmap-service-probes 文件中。数据包的内容还可以通过 --data--data-string--data-length 选项举行自定义。
端口列表的格式与 -PS-PA 选项相同。假如未指定端口,默认使用 40125。这一默认值可以在编译时通过 nmap.h 中的 DEFAULT_UDP_PROBE_PORT_SPEC 举行修改。默认使用较冷门的端口是为了避免影响开放端口上的服务。
当 UDP 探测数据包到达关闭的端口时,目标机应该返回 ICMP 端口不可达(port unreachable) 数据包,Nmap 由此判断该主机在线。假如收到其他 ICMP 错误(如主机/网络不可达或 TTL 超时),通常表现目标主机离线或不可达。假如没有收到任何相应,Nmap 也可能认为主机不可达。
当 UDP 探测数据包到达开放端口时,大多数服务会直接丢弃空数据包,不返回任何相应。这也是默认探测端口设为 40125 的缘故原由——该端口少少被使用。一些特殊服务(如 Character Generator(chargen) 协议)会回应空的 UDP 数据包,因此可以暴露主机的存在。
UDP Ping 的重要优势在于它可以或许绕过仅过滤 TCP 数据包的防火墙。例如,某些路由器(如 Linksys BEFW11S4 无线路由器)默认会过滤所有外部 TCP 端口,但仍然会对 UDP 探测返回 端口不可达 消息,从而泄漏装备的存在。
  1. nmap -PU 192.168.174.145
复制代码

17. -PY [portlist]

需要root权限
SCTP INIT Ping - 对给定端口的SCTP发现
此选项向目标端口发送 SCTP(流控制传输协议)数据包,此中包含一个最小的 INIT(初始化)块。默认目标端口是 80,但可以在编译时通过 nmap.h 中的DEFAULT_SCTP_PROBE_PORT_SPEC 举行修改。用户也可以通过参数指定其他端口,语法与 -p 选项相同,但不答应使用端口范例前缀(如 S:)。例如:-PY22-PY22,80,179,5060。注意,-PY 和端口列表之间不能有空格。假如指定了多个端口,Nmap 会并行发送探测数据包。
SCTP INIT 探测机制 INIT 块表明 Nmap 试图与目标主机建立 SCTP 连接。通常情况下,目标端口是关闭的,此时目标机会返回 ABORT(中止)块。假如端口开放,目标机会进入 SCTP 四步握手的第二步,返回 INIT-ACK(初始化确认)块。
假如运行 Nmap 的主机具备完整的 SCTP 协议栈,它会制止连接,通过发送 ABORT(中止)块来关闭连接,而不是继续发送 COOKIE-ECHO(Cookie 互换)块(四步握手的下一步)。这个 ABORT 数据包由 Nmap 运行的主机内核自动发送,而不是 Nmap 直接发送的。
Nmap 不关心端口是开放还是关闭。无论目标主机返回 ABORT 还是 INIT-ACK,都足以证明该主机在线且可达。
在 Unix 系统上,只有 root 用户 才能发送和吸收原始 SCTP 数据包。普通用户无法使用 SCTP INIT Ping 举行主机探测。
  1. nmap -PY 192.168.174.145
复制代码

18. -PE/PP/PM

ICMP Ping Types - ICMP 回显、时间戳和网络掩码请求发现探测
除了前面先容的 TCP、UDP 和 SCTP 主机发现方法外,Nmap 还可以发送标准的 ICMP 数据包,就像常见的 ping 命令一样。Nmap 发送 ICMP 范例 8(回显请求)数据包,并盼望从可用的主机吸收 ICMP 范例 0(回显应答)数据包。然而,很多主机和防火墙现在会制止这些数据包,而不是按照 RFC 1122 规定的方式举行相应。因此,ICMP 扫描在互联网上针对未知目标通常不敷可靠。但对于系统管理员在内部网络中举行监测,它们仍然是一种实用且高效的方法。使用 -PE 选项可以启用 ICMP 回显请求行为。
虽然回显请求是标准的 ICMP Ping 查询,但 Nmap 并不止于此。ICMP 标准(RFC 792RFC 950)还规定了时间戳请求、信息请求和地址掩码请求数据包,分别对应 ICMP 代码 13、15 和 17。虽然这些查询的本意是获取主机的地址掩码和当前时间等信息,但它们同样可以用于主机发现。只要系统返回相应,就表明主机在线且可用。
Nmap 现在未实现信息请求数据包,因为大多数系统并不支持该功能,而 RFC 1122 也明确规定“主机不应实现这些消息”。但时间戳请求(-PP 选项)和地址掩码请求(-PM 选项)仍然可用。


  • -PP(ICMP 时间戳请求 Ping)
发送 ICMP 时间戳请求(范例 13),假如主机返回 ICMP 时间戳应答(范例 14),则表明主机可用。


  • -PM(ICMP 地址掩码请求 Ping)
发送 ICMP 地址掩码请求(范例 17),假如主机返回 ICMP 地址掩码应答(范例 18),则表明主机可用。
这些查询方法在管理员屏蔽 ICMP 回显请求(Ping)但忽略其他 ICMP 查询的情况下可能仍然有效。
  1. nmap -PE 192.168.174.145
复制代码

  1. nmap -PP 192.168.174.132
复制代码

  1. nmap -PM 192.168.174.132
复制代码

19. -PO <protocol list>

需要root权限
IP 协议 Ping
较新的主机发现选项之一是 IP 协议 ping,它发送 IP 数据包,并在其 IP 标头中设置指定的协议号。协议列表采用与前面讨论的 TCP、UDP 和 SCTP 主机发现选项中的端口列表相同的格式。假如未指定任何协议,则默认为发送 ICMP(协议 1)、IGMP(协议 2)和 IP-in-IP(协议 4)的多个 IP 数据包。可以通过更改 nmap.h 中的 DEFAULT_PROTO_PROBE_PORT_SPEC 在编译时配置默认协议。请注意,对于 ICMP、IGMP、TCP(协议 6)、UDP(协议 17)和 SCTP(协议 132),数据包将使用精确的协议标头发送,而其他协议则在发送时不包含 IP 标头以外的其他数据(除非指定了 --data--data-string--data-length 选项中的任何一个)。
此主机发现方法要么使用与探测相同的协议来查找相应,要么查找 ICMP 协议不可达消息(表现目标主机不支持给定的协议)。任何一种相应都表现目标主机处于活动状态。
  1. nmap -PO 192.168.174.132
复制代码

20.  -n

不用域名剖析 - 从不举行 DNS 剖析 [默认值:有时]
告诉Nmap 永不对它发现的活动IP地址举行反向域名剖析。 既然DNS一般比力慢,这可以让事情更快些。
  1. nmap -n 192.168.174.132
复制代码
 

21.  -R

为所有目标剖析域名
告诉Nmap 永久 对目标IP地址作反向域名剖析。 一般只有当发现呆板正在运行时才举行这项操作。
  1. nmap -R 192.168.174.132
复制代码

22. --disable-arp-ping

无 ARP 或 ND Ping
Nmap 通常会对本地连接的以太网主机实行 ARP 或 IPv6 邻居发现 (ND) 发现,即使使用了其他主机发现选项(如 -Pn -PE)。要禁用此隐式行为,请使用 --disable-arp-ping 选项。
默认行为通常更快,但此选项在使用署理 ARP 的网络上很有用,此中路由器会推测性地复兴所有 ARP 请求,使每个目标根据 ARP 扫描看起来都处于启动状态。
  1. nmap --disable-arp-ping 192.168.174.135
复制代码

23. --discovery-ignore-rst

在某些情况下,防火墙可能会伪造 TCP 重置 (RST) 复兴以相应对未占用或不答应的地址的探测。由于 Nmap 通常将 RST 复兴视为目标已启动的证据,因此这可能会导致浪费时间扫描不存在的目标。使用 --discovery-ignore-rst 将制止 Nmap 在主机发现期间考虑这些复兴。您可能需要选择额外的主机发现选项以确保在这种情况下不会错过目标。
  1. nmap --discovery-ignore-rst 192.168.174.135
复制代码

24. --traceroute

需要root权限
跟踪到主机的路径
跟踪路由是在扫描后实行的,使用来自扫描结果的信息来确定最有可能到达目标的端口和协议。它实用于除连接扫描 (-sT) 和空闲扫描 (-sI) 之外的所有扫描范例。所有跟踪都使用 Nmap 的动态计时模型并并行实行。
跟踪路由的工作原理是发送具有低 TTL(生存时间)的数据包,以实验从扫描仪和目标主机之间的中心跳数引出 ICMP 超时消息。标准跟踪路由实现从 TTL 1 开始,然后增加 TTL,直到到达目标主机。Nmap 的跟踪路由从高 TTL 开始,然后减少 TTL,直到达到零。反向实行此操作可让 Nmap 采用奇妙的缓存算法来加快对多个主机的跟踪。平均而言,Nmap 为每个主机发送的数据包减少了 5-10 个,详细取决于网络条件。假如正在扫描单个子网(即 192.168.0.0/24),Nmap 可能只需要向大多数主机发送两个数据包。
  1. nmap --traceroute 192.168.174.135
复制代码

端口扫描

Nmap所识别的6个端口状态。
open(开放的)

应用程序正在该端口吸收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的重要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙掩护它们以免妨碍了正当用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。 
closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出相应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所资助。 因为关闭的关口是可访问的,大概过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁如许的端口。 那样他们就会被显示为被过滤的状态,下面讨论。 
filtered(被过滤的)

由于包过滤制止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙装备,路由器规则 或者主机上的软件防火墙。如许的端口让攻击者感觉很波折,因为它们几乎不提供 任何信息。有时候它们相应ICMP错误消息如范例3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何相应。 这迫使Nmap重试多少次以访万一探测包是由于网络壅闭丢弃的。 这使得扫描速度明显变慢。 
unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它范例的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以资助确定 端口是否开放。 
open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口分别成 这种状态。开放的端口不相应就是一个例子。没有相应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何相应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。
端口扫描技术

25. -sS

需要root权限
TCP SYN 扫描
SYN 扫描是默认且最流行的扫描选项,缘故原由很充实。它可以快速实行,在不受限定性防火墙阻碍的快速网络上每秒扫描数千个端口。由于它从不完成 TCP 连接,因此它也相对不引人注目且隐秘。SYN 扫描实用于任何兼容的 TCP 堆栈,而不是像 Nmap 的 FIN/NULL/Xmas、Maimon 和空闲扫描那样依靠于特定平台的特性。它还可以清晰、可靠地区分开放、关闭和过滤状态。
这种技术通常称为半开放扫描,因为您不会打开完整的 TCP 连接。您发送一个 SYN 数据包,就好像您要打开一个真正的连接,然后等候相应。SYN/ACK 表现端口正在监听(打开),而 RST(重置)表现非监听者。假如在多次重新传输后仍未收到相应,则端口被标志为已过滤。假如收到 ICMP 不可达错误(范例 3,代码 0、1、2、3、9、10 或 13),端口也会被标志为已过滤。假如收到 SYN 数据包(不带 ACK 标志),端口也会被视为开放。这可能是由于一种极为稀有的 TCP 功能,即同时打开或拆分握手连接(请参阅 https://nmap.org/misc/split-handshake.pdf)。
  1. nmap -sS 192.168.174.132
复制代码

26. -sT

TCP 连接扫描
当 SYN 扫描不可用时,TCP 连接扫描是默认的 TCP 扫描范例。当用户没有原始数据包权限时,就会出现这种情况。与大多数其他扫描范例不同,Nmap 不会写入原始数据包,而是通过发出连接系统调用来要求底层操作系统与目标呆板和端口建立连接。这是 Web 欣赏器、P2P 客户端和大多数其他支持网络的应用程序用于建立连接的相同高级系统调用。它是称为 Berkeley Sockets API 的编程接口的一部分。Nmap 不会从线路上读取原始数据包相应,而是使用此 API 获取每次连接实验的状态信息。
当 SYN 扫描可用时,它通常是更好的选择。Nmap 对高级连接调用的控制比对原始数据包的控制少,因此效率较低。系统调用完成与开放目标端口的连接,而不是实行 SYN 扫描实行的半开重置。这不但需要更长的时间,需要更多的数据包才能获得相同的信息,而且目标呆板更有可能记载连接。一个像样的 IDS 可以捕获这两种情况,但大多数呆板没有如许的警报系统。当 Nmap 连接然后关闭连接而不发送数据时,普通 Unix 系统上的很多服务都会向系统日记添加解释,有时还会添加秘密的错误消息。当这种情况发生时,真正可悲的服务会崩溃,只管这种情况并不常见。假如管理员在日记中看到来自单个系统的大量连接实验,她应该知道她已被连接扫描。
  1. nmap -sT 192.168.174.132
复制代码

27. -sU

需要root权限
UDP扫描
虽然互联网上大多数流行的服务都通过 TCP 协议运行,但 UDP 服务也得到了广泛部署。DNS、SNMP 和 DHCP(注册端口 53、161/162 和 67/68)是此中最常见的三种。由于 UDP 扫描通常比 TCP 更慢且更困难,因此一些安全审计员会忽略这些端口。这是一个错误,因为可利用的 UDP 服务非常常见,攻击者固然不会忽略整个协议。幸运的是,Nmap 可以资助清点 UDP 端口。
使用 -sU 选项激活 UDP 扫描。它可以与 TCP 扫描范例(如 SYN 扫描 (-sS))联合使用,以在同一次运行期间检查两种协议。
UDP 扫描通过向每个目标端口发送 UDP 数据包来工作。对于一些常见端口(如 53 和 161),会发送特定于协议的有效负载以进步相应率,但对于大多数端口,除非指定 --data--data-string--data-length 选项,否则数据包为空。假如返回 ICMP 端口不可达错误(范例 3,代码 3),则表现端口已关闭。其他 ICMP 不可达错误(范例 3,代码 0、1、2、9、10 或 13)将端口标志为已过滤。有时,服务会使用 UDP 数据包举行相应,证明它是开放的。假如在重新传输后未收到任何相应,则端口被归类为开放|过滤。这意味着端口可能已打开,或者数据包过滤器可能制止了通信。版本检测(-sV)可用于资助区分真正开放的端口和已过滤的端口。
UDP 扫描的一大挑衅是快速完成。开放和已过滤的端口很少发送任何相应,导致 Nmap 超时,然后举行重新传输,以防探测或相应丢失。关闭的端口通常是一个更大的问题。它们通常会发回 ICMP 端口不可达错误。但是与关闭的 TCP 端口相应 SYN 或连接扫描而发送的 RST 数据包不同,很多主机默认限定 ICMP 端口不可达消息的速率。Linux 和 Solaris 对此特别严格。例如,Linux 2.4.20 内核将目标不可达消息限定为每秒一条(在 net/ipv4/icmp.c 中)。
Nmap 会检测速率限定并相应地减慢速度,以避免目标呆板会丢弃的无用数据包充斥网络。不幸的是,Linux 风格的每秒一个数据包的限定使 65,536 个端口的扫描需要超过 18 小时。加快 UDP 扫描速度的想法包括并行扫描更多主机、起首快速扫描常用端口、从防火墙后面扫描以及使用 --host-timeout 跳过速度慢的主机。
  1. nmap -sU 192.168.174.132
复制代码

28. -sY

需要root权限
SCTP INIT 扫描
SCTP 是 TCP 和 UDP 协议的一个相对较新的替换方案,它联合了 TCP 和 UDP 的大部分特性,还添加了多宿主和多流等新功能。它重要用于 SS7/SIGTRAN 相关服务,但也有潜力用于其他应用程序。SCTP INIT 扫描是 TCP SYN 扫描的 SCTP 等效项。它可以快速实行,在不受限定性防火墙阻碍的快速网络上每秒扫描数千个端口。与 SYN 扫描一样,INIT 扫描相对不引人注目且隐秘,因为它从不完成 SCTP 关联。它还答应清晰、可靠地区分开放、关闭和过滤状态。
这种技术通常称为半开放扫描,因为您不会打开完整的 SCTP 关联。您发送一个 INIT 块,就好像您要打开一个真正的关联,然后等候相应。 INIT-ACK 块表现端口正在监听(打开),而 ABORT 块表现端口未监听。假如在多次重传后仍未收到相应,则端口被标志为已过滤。假如收到 ICMP 不可达错误(范例 3,代码 0、1、2、3、9、10 或 13),端口也会被标志为已过滤。
  1. nmap -sY 192.168.174.135
复制代码

29. -sN;-sF;-sX

需要root权限
TCP NULL、FIN 和 Xmas 扫描
这三种扫描范例(使用下一节中先容的 --scanflags 选项,可以实现更多扫描范例)利用 TCP RFC 中的一个微妙漏洞来区分 open (开放)和 closed(关闭)的端口。RFC 793 第 65 页指出,“假如 [目标] 端口状态为 CLOSED .... 不包含 RST 的传入段会导致发送 RST 作为相应。”然后,下一页讨论了发送到未设置 SYN、RST 或 ACK 位的开放端口的数据包,指出:“您不太可能到达这里,但假如到达,请丢弃该段并返回。”
在扫描符合此 RFC 文本的系统时,假如端口已关闭,则任何不包含 SYN、RST 或 ACK 位的数据包都会导致返回 RST,假如端口已打开,则根本不会相应。只要不包括这三个位中的任何一个,其他三个位(FIN、PSH 和 URG)的恣意组合都可以。Nmap 利用三种扫描范例利用了这一点:
Null扫描 (-sN)
        不设置任何位(TCP 标志头为 0)
FIN 扫描 (-sF)
        仅设置 TCP FIN 位。
Xmas 扫描 (-sX)
        设置 FIN、PSH 和 URG 标志,使数据包像圣诞树一样亮起来。
除了探测数据包中设置的 TCP 标志外,这三种扫描范例的行为完全相同。假如收到 RST 数据包,则认为端口 closed (已关闭),而没有相应则意味着端口已 open|filtered (打开|过滤)。假如收到 ICMP 不可达错误(范例 3,代码 0、1、2、3、9、10 或 13),则端口被标志为已过滤。
这些扫描范例的重要优势在于它们可以潜入某些非状态防火墙和数据包过滤路由器。另一个长处是这些扫描范例比 SYN 扫描更隐蔽。但不要指望这一点——大多数现代 IDS 产物都可以配置为检测它们。最大的缺点是并非所有系统都严格遵循 RFC 793。很多系统都会向探测器发送 RST 相应,无论端口是否打开。这会导致所有端口都被标志为关闭。实行此操作的重要操作系统是 Microsoft Windows、很多 Cisco 装备、BSDI 和 IBM OS/400。不过,这种扫描确实实用于大多数基于 Unix 的系统。这些扫描的另一个缺点是它们无法区分开放端口和某些 filtered (过滤)端口,导致相应处于 open|filtered (打开|过滤)状态。
  1. nmap -sN 192.168.174.132
复制代码

  1. nmap -sF 192.168.174.132
复制代码

  1. nmap -sX 192.168.174.132
复制代码
 

30. -sA

需要root权限
TCP ACK 扫描
此扫描与迄今为止讨论的其他扫描不同,因为它从不确定 open (开放)(甚至 open|filtered 开放|过滤)端口。它用于映射防火墙规则集,确定它们是否有状态以及哪些端口被过滤。
ACK 扫描探测数据包仅设置了 ACK 标志(除非您使用 --scanflags)。扫描未过滤的系统时,open (开放)和 closed (关闭)的端口都将返回 RST 数据包。然后 Nmap 将它们标志为未过滤,这意味着它们可以通过 ACK 数据包访问,但它们是 open (开放)还是 closed (关闭)尚不确定。不相应或发回某些 ICMP 错误消息(范例 3,代码 0、1、2、3、9、10 或 13)的端口被标志为 filtered (已过滤)。
  1. nmap -sA 192.168.174.132
复制代码
 

31. -sW

需要root权限
TCP 窗口扫描
窗口扫描与 ACK 扫描完全相同,只是它利用某些系统的实现细节来区分开放端口和关闭端口,而不是在返回 RST 时始终打印未过滤端口。它通过检查返回的 RST 数据包的 TCP 窗口字段来实现这一点。在某些系统上,开放端口使用正窗口巨细(即使对于 RST 数据包也是云云),而关闭端口的窗口巨细为零。因此,当端口收到 RST 返回时,窗口扫描不会始终将端口列为未过滤端口,而是在重置中的 TCP 窗口值为正或为零时分别将端口列为开放或关闭。
此扫描依靠于互联网上少数系统的实现细节,因此您不能总是信任它。不支持它的系统通常会返回所有关闭的端口。固然,呆板可能真的没有开放的端口。假如大多数扫描的端口都已关闭,但一些常用端口号(如 22、25、53)已被过滤,则系统很可能轻易受到攻击。有时,系统甚至会表现出完全相反的行为。假如您的扫描显示 1,000 个开放端口和 3 个关闭或过滤的端口,那么这 3 个端口很可能是真正开放的端口。
  1. nmap -sW 192.168.174.132
复制代码

32. -sM

需要root权限
TCP Maimon扫描
Maimon扫描是用它的发现者Uriel Maimon定名的。他在 Phrack Magazine issue #49 (November 1996)中描述了这一技术。 Nmap在两期后加入了这一技术。 这项技术和Null,FIN,以及Xmas扫描完全一样,除了探测报文是FIN/ACK。 根据RFC 793 (TCP),无论端口开放或者关闭,都应该对如许的探测相应RST报文。 然而,Uriel注意到假如端口开放,很多基于BSD的系统只是丢弃该探测报文。 
  1. nmap -sM 192.168.174.134
复制代码

33. --scanflags

定制的TCP扫描
真正的Nmap高级用户不需要被这些现成的扫描范例束缚。 --scanflags选项答应您通过指定恣意TCP标志位来计划您自己的扫描。 让您的创造力流动,躲开那些仅靠本手册添加规则的入侵检测系统!
--scanflags选项可以是一个数字标志值如9 (PSH和FIN), 但使用字符名更轻易些。 只要是URG, ACK,PSH, RST,SYN,和 FIN的任何组合就行。例如,--scanflags URGACKPSHRSTSYNFIN设置了所有标志位,但是这对扫描没有太大用处。 标志位的次序不紧张。
除了设置需要的标志位,您也可以设置 TCP扫描范例(如-sA或者-sF)。 那个根本范例告诉Nmap怎样表明相应。例如, SYN扫描认为没有相应意味着 filtered端口,而FIN扫描则认为是 open|filtered。 除了使用您指定的TCP标志位,Nmap会和根本扫描范例一样工作。 假如您不指定根本范例,就使用SYN扫描。
  1. nmap --scanflags URGACKPSHRSTSYNFIN 192.168.174.132
复制代码
 

34. -sZ

需要root权限
SCTP COOKIE ECHO 扫描
SCTP COOKIE ECHO 扫描是一种更高级的 SCTP 扫描。它利用了如许一个事实:SCTP 实现应该在开放端口上悄悄丢弃包含 COOKIE ECHO 块的数据包,但假如端口关闭,则发送 ABORT。这种扫描范例的长处是,它不像 INIT 扫描那样明显是端口扫描。此外,可能存在非状态防火墙规则集制止 INIT 块,但不会制止 COOKIE ECHO 块。不要误以为这会使端口扫描不可见;好的 IDS 也可以或许检测到 SCTP COOKIE ECHO 扫描。缺点是 SCTP COOKIE ECHO 扫描无法区分 open (开放)端口和 filtered(过滤)端口,在两种情况下,您都处于 open|filtered(打开|过滤)状态。
  1. nmap -sZ 192.168.174.132
复制代码

35. -sI <zombie host[:probeport]>

需要root权限
空闲扫描
这种高级的扫描方法答应对目标举行真正的TCP端口盲扫描 (意味着没有报文从您的真实IP地址发送到目标)。相反,side-channel攻击 利用zombie主机上已知的IP分段ID序列天生算法来窥伺目标上开放端口的信息。 IDS系统将显示扫描来自您指定的zombie机(必须运行而且符合肯定的标准)。 这种奇妙的扫描范例太复杂了,不能在此完全描述,所以我写一篇非正式的论文, 发布在https://nmap.org/book/idlescan.html。
除了极端隐蔽(由于它不从真实IP地址发送任何报文), 该扫描范例可以建立呆板间的基于IP的信任关系。 端口列表从zombie 主机的角度。显示开放的端口。 因此您可以实验用您认为(通过路由器/包过滤规则)可能被信任的 zombies扫描目标。
假如您由于IPID改变盼望探测zombie上的特定端口, 您可以在zombie 主机后加上一个冒号和端口号。 否则Nmap会使用默认端口(80)。
  1. nmap -sI 192.168.174.132:443 192.168.174.145
复制代码

36. -sO

需要root权限
IP协议扫描
IP 协议扫描可以让您确定目标机支持哪些IP协议 (TCP,ICMP,IGMP,等等)。从技术上说,这不是端口扫描 ,既然它遍历的是IP协议号而不是TCP或者UDP端口号。 但是它仍使用 -p选项选择要扫描的协议号, 用正常的端口表格式报告结果,甚至用和真正的端口扫描一样 的扫描引擎。因此它和端口扫描非常接近,也被放在这里讨论。
除了自己很有用,协议扫描还显示了开源软件的力气。 只管根本想法非常简朴,我过去从没想过增加这一功能也充公到任何对它的请求。 在2000年夏天,Gerhard Rieger孕育了这个想法,写了一个很棒的补丁程序,发送到nmap-hackers邮件列表。 我把那个补丁加入了Nmap,第二天发布了新版本。 几乎没有商业软件会有用户有足够的热情计划并贡献他们的改进。
协议扫描以和UDP扫描类似的方式工作。它不是在UDP报文的端口域上循环, 而是在IP协议域的8位上循环,发送IP报文头。 报文头通常是空的,不包含数据,甚至不包含所申明的协议的精确报文头 TCP,UDP,和ICMP是三个破例。它们三个会使用正常的协议头,因为否则某些系 统拒绝发送,而且Nmap有函数创建它们。协议扫描不是注意ICMP端口不可到达消息, 而是ICMP 协议不可到达消息。假如Nmap从目标主机收到 任何协议的任何相应,Nmap就把那个协议标志为open。 ICMP协议不可到达 错误(范例 3,代号 2) 导致协议被标志为 closed。其它ICMP不可到达协议(范例 3,代号 1,3,9,10,或者13) 导致协议被标志为 filtered (虽然同时他们证明ICMP是 open )。假如重试之后仍没有收到相应, 该协议就被标志为open|filtered
  1. nmap -sO 192.168.175.145
复制代码

37. -b <FTP relay host>

FTP 反弹扫描
FTP 协议 (RFC 959) 的一个风趣功能是支持所谓的署理 FTP 连接。这答应用户连接到一个 FTP 服务器,然后要求将文件发送到第三方服务器。这种功能在很多层面上都很轻易被滥用,因此大多数服务器已制止支持它。此功能答应的滥用之一是导致 FTP 服务器对其他主机举行端口扫描。只需要求 FTP 服务器依次将文件发送到目标主机的每个相关端口即可。错误消息将描述端口是否打开。这是一种绕过防火墙的好方法,因为组织的 FTP 服务器通常放置在比任何旧 Internet 主机更能访问其他内部主机的地方。Nmap 使用 -b 选项支持 FTP 反弹扫描。它采用 <username>:<password>@<server>:<port> 形式的参数。<Server> 是易受攻击的 FTP 服务器的名称或 IP 地址。与普通 URL 一样,您可以省略 <username>:<password>,在这种情况下将使用匿名登录凭据(user:anonymous password:-wwwuser@)。端口号(和前面的冒号)也可以省略,在这种情况下将使用 <server> 上的默认 FTP 端口 (21)。
此漏洞在 1997 年 Nmap 发布时非常普遍,但已根本得到修复。易受攻击的服务器仍然存在,因此当所有其他方法都失败时,值得实验。假如您的目标是绕过防火墙,请扫描目标网络中的端口 21(或者假如您使用版本检测扫描所有端口,甚至可以扫描任何 FTP 服务)并使用 ftp-bounce NSE 脚本。Nmap 会告诉您主机是否易受攻击。假如您只是想粉饰自己的踪迹,则不需要(事实上也不应该)将自己限定在目标网络上的主机上。在您开始扫描随机 Internet 地址以查找易受攻击的 FTP 服务器之前,请考虑系统管理员可能不喜欢您以这种方式滥用他们的服务器。
  1. nmap -Pn -b ftp://msfadmin:msfadmin@192.168.174.132:21 192.168.175.145
复制代码

端口说明和扫描次序

38. -p <port ranges>

仅扫描指定端口
例如:-p22;-p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
此选项指定您要扫描的端口并覆盖默认值。单个端口号是可以的,范围用连字符分隔也是可以的(例如 1-1023)。范围的开始值和/或竣事值可以省略,这会导致 Nmap 分别使用 1 和 65535。因此,您可以指定 -p- 来扫描从 1 到 65535 的端口。假如您明确指定,则可以扫描端口0。对于 IP 协议扫描(-sO),此选项指定您要扫描的协议号(0-255)。
当扫描协议组合(例如 TCP 和 UDP)时,您可以通过在端口号前加上 T:(表现 TCP)、U:(表现 UDP)、S:(表现 SCTP)或 P:(表现 IP 协议)来指定特定协议。限定符连续到您指定另一个限定符为止。例如,参数 -p U:53,111,137,T:21-25,80,139,8080 将扫描 UDP 端口 53、111 和 137,以及列出的 TCP 端口。请注意,要同时扫描 UDP 和 TCP,您必须指定 -sU 和至少一种 TCP 扫描范例(例如 -sS-sF-sT)。假如没有给出协议限定符,则端口号将添加到所有协议列表中。
还可以根据 nmap-services 中端口的引用来按名称指定端口。您甚至可以将通配符 * 和 ? 与名称一起使用。例如,要扫描 FTP 和所有名称以“http”开头的端口,请使用 -p ftp,http*。请小心使用 shell 扩展,假如不确定,请引用 -p 的参数。
端口范围可以用方括号括起来,以指示 nmap-services 中出现的该范围内的端口。例如,以下命令将扫描 nmap-services 中所有等于或小于 1024 的端口:-p [-1024]。请谨慎使用 shell 扩展,假如不确定,请引用 -p 的参数。
  1. nmap -p 80 192.168.174.0/24
复制代码
 

  1. nmap -Pn -p 1-1023 192.168.174.129
复制代码

-p- 来扫描从 1 到 65535 的端口
  1. nmap -p- 192.168.174.135
复制代码
 

  1. nmap -p 0 192.168.174.134
复制代码

  1. nmap -sO -p 0-255 192.168.174.132
复制代码

  1. nmap -sU -sS -p U:53,111,137,T:21-25,80,139,8080 192.168.174.132
复制代码

  1. nmap -p ftp,http* 192.168.174.145
复制代码
 

  1. nmap -p [-1024] 192.168.174.145
复制代码

39. --exclude-ports <port ranges>

从扫描中清除指定端口
此选项指定您盼望 Nmap 从扫描中清除哪些端口。<端口范围> 的指定方式与 -p 类似。对于 IP 协议扫描 (-sO),此选项指定您盼望清除的协议编号 (0-255)。
当要求清除端口时,它们将被清除在所有范例的扫描之外(即在任何情况下都不会被扫描)。这也包括发现阶段。
  1. nmap -Pn --exclude-ports 21,22,80,443,8080 192.168.174.132
复制代码

  1. nmap -sO --exclude-ports 100-150 192.168.174.132
复制代码

40. -F

快速(有限端口)扫描
指定您盼望扫描比默认端口更少的端口。通常,Nmap 会扫描每个扫描协议最常见的 1,000 个端口。使用 -F,此数量会减少到 100。
Nmap 需要一个包含频率信息的 nmap-services 文件,以便知道哪些端口最常用。假如没有端口频率信息(可能是因为使用了自定义 nmap-services 文件),Nmap 会扫描所有定名端口以及 1-1024 端口。在这种情况下,-F 表现仅扫描服务文件中定名的端口。
  1. nmap -F 192.168.174.145
复制代码
 

41. -r

不要按随机次序扫描端口
默认情况下,Nmap 会随机化扫描端口的次序(但出于效率缘故原由,某些常用的可访问端口会被移到开头附近)。这种随机化通常是可取的,但您可以指定 -r 来举行次序(从低到高排序)端口扫描。
  1. nmap -r 192.168.174.135
复制代码

42. --port-ratio <ratio><decimal number between 0 and 1>

扫描比 <ratio> 更常见的端口
扫描 nmap-services 文件中所有比率大于给定值的端口。<ratio> 必须介于 0.0 和 1.0 之间。
  1. nmap --port-ratio 0 192.168.174.132
复制代码
 

43. --top-ports <n>

扫描 <n> 个最常用的端口
在清除 --exclude-ports 指定的所有端口后,扫描 nmap-services 文件中找到的 <n> 个最高比率端口。<n> 必须为 1 或更大。
  1. nmap --top-ports 10 192.168.174.132
复制代码

服务和版本探测

44. -sV

版本检测 - 探测开放端口以确定服务/版本信息
启用版本检测,如上所述。或者,您可以使用 -A,它除其他功能外还启用版本检测。
-sR-sV 的别名。2011 年 3 月之前,它用于独立于版本检测激活 RPC 研磨机,但现在这些选项始终联合在一起。
  1. nmap -sV 192.168.174.132
复制代码

45. --allports

不为版本探测清除任何端口
默认情况下,Nmap版本探测会跳过9100 TCP端口,因为一些打印机简朴地打印送到该端口的 任何数据,这回导致数十页HTTP get请求,二进制 SSL会话请求等等被打印出来。这一行为可以通过修改或删除nmap-service-probes 中的Exclude指示符改变, 您也可以不分析任何Exclude指示符,指定--allports扫描所有端口 
  1. nmap --allports 192.168.174.132
复制代码

46. --version-intensity <intensity>

设置版本扫描强度 - 设置为 0(轻度)到 9(实验所有探测)
当举行版本扫描(-sV)时,nmap发送一系列探测报文 ,每个报文都被赋予一个1到9之间的值。 被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没什么用。强度水平说明了应该使用哪些探测报文。数值越高, 服务越有可能被精确识别。 然而,高强度扫描花更多时间。强度值必须在0和9之间。 默认是7。当探测报文通过nmap-service-probes ports指示符注册到目标端口时,无论什么强度水平,探测报文都会被实验。这保证了DNS 探测将永久在任何开放的53端口实验, SSL探测将在443端口实验,等等。
  1. nmap -sV --version-intensity 7 192.168.174.145
复制代码
 

47. --version-light

打开轻量级模式 - 限定为最可能的探测(强度 2)
这是 --version-intensity 2的方便的别名。轻量级模式使 版本扫描快很多,但它识别服务的可能性也略微小一点。
  1. nmap -sV --version-light 192.168.174.132
复制代码

48. --version-all

实验每个探测(强度 9)
--version-intensity 9的别名, 保证对每个端口实验每个探测报文。
  1. nmap -sV --version-all 192.168.174.132
复制代码

49. --version-trace

跟踪版本扫描活动 - 显示详细的版本扫描活动(用于调试)
这导致Nmap打印出详细的关于正在举行的扫描的调试信息。 它是您用--packet-trace所得到的信息的子集。
  1. nmap --version-trace 192.168.174.135
复制代码

操作系统探测

50. -O

需要root权限
启用操作系统检测
启用操作系统检测,如上所述。或者,您可以使用 -A 来启用操作系统检测以及其他功能。
  1. nmap -O 192.168.174.135
复制代码
 

  1. nmap -A -O scan.nmap.org
复制代码

51. --osscan-limit

将操作系统检测限定在有盼望的目标上
假如至少发现一个开放的 TCP 端口和一个关闭的 TCP 端口,操作系统检测将更加有效。设置此选项后,Nmap 将不会实验对不符合此标准的主机举行操作系统检测。这可以节省大量时间,尤其是在对很多主机举行 -Pn 扫描时。只有当使用 -O-A 请求操作系统检测时,它才故意义。
  1. nmap -A -O --osscan-limit 192.168.174.145
复制代码
 

52. --osscan-guess; --fuzzy

推测操作系统检测结果 - 更积极地推测操作系统
当 Nmap 无法检测到完善的操作系统匹配时,它有时会提供近似匹配作为可能性。默认情况下,匹配必须非常接近,Nmap 才能实行此操作。这两个(等效)选项中的任何一个都会使 Nmap 推测得更积极。Nmap 仍会告诉您何时打印了不完善的匹配,并显示每个推测的置信度(百分比)。
  1. nmap --osscan-guess scan.nmap.org
复制代码
 

  1. nmap -O --fuzzy scan.nmap.org
复制代码

53. --max-os-tries

设置针对目标的最大操作系统检测实验次数
当 Nmap 针对目标实行操作系统检测但未能找到完善匹配时,它通常会重复实验。默认情况下,假如条件有利于操作系统指纹提交,Nmap 会实验五次,假如条件不太好,则实验两次。指定较低的 --max-os-tries 值(例如 1)可加快 Nmap 的速度,但您会错过可能识别操作系统的重试。或者,可以设置较高的值以在条件有利时答应更多重试。除非为了天生更好的指纹以提交并集成到 Nmap 操作系统数据库中,否则很少如许做。
  1. nmap -O --osscan-limit --osscan-guess --max-os-tries 10 192.168.174.132
复制代码

Nmap 脚本引擎(NSE)

54. -sC

相当于--script=default
使用默认脚本集实行脚本扫描。它相当于 --script=default。此类别中的某些脚本被视为侵入性脚本,未经许可不应针对目标网络运行。
  1. nmap -sC 192.168.174.132
复制代码

55. --script=<Lua scripts> | --script <filename>|<category>|<directory>/|<expression>[,...]

<Lua scripts> 是一个逗号分隔的目录、脚本文件或脚本类别列表。
使用逗号分隔的文件名、脚本类别和目录列表运行脚本扫描。列表中的每个元素也可能是描述更复杂脚本集的布尔表达式。每个元素起首被表明为表达式,然后被表明为类别,末了被表明为文件或目录名称。
有两个特殊功能仅供高级用户使用。一个是在脚本名称和表达式前加上 + 以欺压它们运行,即使它们通常不会运行(例如,在目标端口上未检测到相关服务)。另一个是参数 all 可用于指定 Nmap 数据库中的每个脚本。请谨慎使用此功能,因为 NSE 包含伤害脚本,例如漏洞利用、暴力身份验证破解程序和拒绝服务攻击。
文件和目录名称可以是相对的,也可以是绝对的。绝对名称可直接使用。在以下每个位置的脚本中查找相对路径,直到找到:
--datadir
$NMAPDIR
~/.nmap(不在 Windows 系统上搜索)
<APPDATA>\nmap(仅在 Windows 上)
包含 nmap 可实行文件的目录
包含 nmap 可实行文件的目录,后跟 ../share/nmap(不在 Windows 系统上搜索)
NMAPDATADIR(不在 Windows 系统上搜索)
当前目录。

Nmap 脚本目录路径:/usr/share/nmap/scripts/

当给出以 / 结尾的目录名时,Nmap 会加载目录中名称以 .nse 结尾的每个文件。所有其他文件都将被忽略,而且不会递归搜索目录。当给出文件名时,它不必具有 .nse 扩展名;如有必要,它将自动添加。
默认情况下,Nmap 脚本存储在 Nmap 数据目录的 scripts 子目录中。为了进步效率,脚本在存储在 scripts/script.db 中的数据库中编入索引,该数据库列出了每个脚本所属的类别。
当按名称引用 script.db 中的脚本时,可以使用 shell 样式的“*”通配符。
  1. nmap --script "http-*"
复制代码
加载名称以 http- 开头的所有脚本,例如 http-auth 和 http-open-proxy。 --script 的参数必须放在引号中,以掩护通配符不受 shell 的影响。 
 

可以使用 and、or 和 not 运算符来构建布尔表达式,从而完成更复杂的脚本选择。这些运算符的优先级与 Lua 中的优先级相同:not 最高,其次是 and,然后是 or。您可以使用括号来改变优先级。由于表达式包含空格字符,因此必须将它们括起来。
  1. nmap --script "not intrusive"
复制代码
加载除 intrusive 类别之外的所有脚本。

  1. nmap --script "default or safe"
复制代码
这在功能上等同于 nmap --script "default,safe"。它加载默认类别或安全类别或两者中的所有脚本。

  1. nmap --script "default and safe"
复制代码
加载默认和安全类别中的脚本。

  1. nmap --script "(default or safe or intrusive) and not http-*"
复制代码
加载默认、安全或侵入类别中的脚本,但名称以 http- 开头的脚本除外。

56. --script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

为脚本提供参数。
答应您向 NSE 脚本提供参数。参数是逗号分隔的名称=值对列表。名称和值可以是不包含空格或字符“{”、“}”、“=”或“,”的字符串。要在字符串中包含这些字符之一,请将字符串括在单引号或双引号中。在带引号的字符串中,“\”表现对引号举行转义。反斜杠仅用于在这种特殊情况下转义引号;在所有其他情况下,反斜杠都按字面意思表明。值也可以是用 {} 括起来的表,就像在 Lua 中一样。表可以包含简朴的字符串值或更多名称-值对,包括嵌套表。很多脚本使用脚本名称限定其参数,例如 xmpp-info.server_name。您可以使用该完整限定版原来仅影响指定的脚本,也可以传递非限定版本(在本例中为 server_name)来影响使用该参数名称的所有脚本。脚本将起首检查其完整限定参数名称(其文档中指定的名称),然后才接受非限定参数名称。脚本参数的一个复杂示例是
--script-args 'user=foo,pass=",{}=bar",whois={whodb=nofollow+ripe},xmpp-info.server_name=localhost'
在线 NSE 文档流派 https://nmap.org/nsedoc/ 列出了每个脚本接受的参数。
  1. nmap --script "http-brute" --script-args 'user=admin,pass="password' 192.168.174.132
复制代码

57. --script-args-file <filename>

在文件中提供 NSE 脚本参数。
答应您从文件加载 NSE 脚本的参数。命令行上的任何参数都会取代文件中的参数。文件可以是绝对路径,也可以是相对于 Nmap 常用搜索路径(NMAPDIR 等)的路径。参数可以用逗号分隔或用换行符分隔,但其他方面遵循与 --script-args 相同的规则,无需特殊引用和转义,因为它们不会被 shell 剖析。
  1. nmap --script "http-brute" --script-args-file=/home/kali/args.txt 192.168.174.132
  2. #也可以把--script-args-file写成--script-args-file "/home/kali/args.txt"这样的格式。
复制代码

58. --script-help=<Lua scripts> | --script-help <filename>|<category>|<directory>|<expression>|all[,...]

显示有关脚本的资助。<Lua scripts> 是一个逗号分隔的脚本文件或脚本类别列表。
显示有关脚本的资助。对于符合给定规范的每个脚本,Nmap 都会打印脚本名称、其类别及其描述。规范与 --script 接受的规范相同;因此,例如,假如您需要有关 ftp-anon 脚本的资助,您可以运行 nmap --script-help ftp-anon。除了获取单个脚本的资助外,您还可以使用它来预览将为规范运行哪些脚本,例如使用 nmap --script-help default
  1. nmap --script-help ftp-anon
复制代码

  1. nmap --script-help default
复制代码

59. --script-trace

显示所有发送和吸收的数据。
此选项的作用与 --packet-trace 相同,只是高出一个 ISO 层。假如指定此选项,则打印脚本实行的所有传入和传出通信。显示的信息包括通信协议、源、目标和传输的数据。假如超过 5% 的传输数据无法打印,则跟踪输出为十六进制转储格式。指定 --packet-trace 也会启用脚本跟踪。
  1. nmap --script "http-brute" --script-trace 192.168.174.132
复制代码

60. --script-updatedb

需要root权限
更新脚本数据库。
此选项更新 scripts/script.db 中的脚本数据库,Nmap 会使用该数据库来确定可用的默认脚本和类别。只有在您从默认脚本目录中添加或删除了 NSE 脚本,或者更改了任何脚本的类别时,才需要更新数据库。此选项通常单独使用:nmap --script-updatedb
  1. nmap --script-updatedb
复制代码
 

时间和性能

使用<time>的选项以秒为单位,或将“ms”(毫秒)、“s”(秒)、“m”(分钟)或“h”(小时)附加到值(例如 30 m)。
61. --min-hostgroup <numhosts>; --max-hostgroup <numhosts>

调整并行扫描组巨细
Nmap 可以或许并行对多个主机举行端口扫描或版本扫描。Nmap 通过将目标 IP 空间分别为组,然后一次扫描一个组来实现此目标。一般来说,组越大效率越高。缺点是,在整个组完成之前无法提供主机结果。因此,假如 Nmap 以 50 的组巨细开始,则在前 50 个主机完成之前,用户不会收到任何报告(详细模式下提供的更新除外)。
默认情况下,Nmap 接纳折衷方法解决此辩论。它以低至 5 的组巨细开始,以便快速获得第一个结果,然后将组巨细增加到 1024。确切的默认数字取决于给定的选项。出于效率缘故原由,Nmap 对 UDP 或少量端口 TCP 扫描使用更大的组巨细。
当使用 --max-hostgroup 指定最大组巨细时,Nmap 将永久不会超过该巨细。使用 --min-hostgroup 指定最小巨细,Nmap 将实验保持组巨细高于该级别。假如给定接口上剩余的目标主机不足以满意指定的最小值,Nmap 可能必须使用比您指定的更小的组。两者都可以设置为将组巨细保持在特定范围内,只管这很少需要。
这些选项在扫描的主机发现阶段不起作用。这包括普通的 ping 扫描 (-sn)。主机发现始终在大型主机组中工作,以进步速度和准确性。
这些选项的重要用途是指定较大的最小组巨细,以便完整扫描运行得更快。常见的选择是 256 以 /24 巨细的块扫描网络。对于具有很多端口的扫描,超过该数字不太可能有太大资助。对于仅扫描几个端口号的扫描,2048 或更大的主机组巨细可能会有所资助。
  1. nmap --min-hostgroup 10 --max-hostgroup 50 192.168.174.145
复制代码

62. --min-parallelism <numprobes>; --max-parallelism <numprobes>

调整探测报文的并行度
这些选项控制主机组可能未完成的探测总数。它们用于端口扫描和主机发现。默认情况下,Nmap 根据网络性能盘算不绝变化的理想并行度。假如数据包被丢弃,Nmap 会放慢速度并答应更少的未完成探测。随着网络证明其代价,理想探测数量会痴钝上升。这些选项对该变量设置最小或最大界限。默认情况下,假如网络证明不可靠,理想并行度可能会降至 1,而在完善条件下则上升到几百。
最常见的用法是将 --min-parallelism 设置为大于 1 的数字,以加快对性能不佳的主机或网络的扫描。这是一个有风险的选项,因为将其设置得太高可能会影响准确性。设置此选项还会降低 Nmap 根据网络条件动态控制并行度的本领。值 10 可能是合理的,只管我只在万不得已的情况下才调整此值。
--max-parallelism 选项有时设置为 1,以防止 Nmap 一次向主机发送多个探测。 --scan-delay 选项(稍后讨论)是另一种实现此目标的方法。
  1. nmap --min-parallelism 1 --max-parallelism 10  192.168.174.145
复制代码

63. --min-rtt-timeout <time>、--max-rtt-timeout <time>、--initial-rtt-timeout <time>

调整探测报文超时
Nmap 维护一个运行超时值,用于确定在放弃或重新传输探测之前等候探测相应的时间。这是根据先前探测的相应时间盘算的。确切的公式在“扫描代码和算法”一节中给出。假如网络延迟显示为明显且可变,则此超时可能会增加到几秒钟。它也从保守(高)水平开始,而且当 Nmap 扫描无相应的主机时可能会保持这种状态一段时间。
指定比默认值更低的 --max-rtt-timeout--initial-rtt-timeout 可以明显收缩扫描时间。对于无 ping(-Pn)扫描和针对严格过滤网络的扫描尤其云云。但不要太激进。假如您指定的值太低,以至于很多探测器在相应传输过程中超时并重新传输,则扫描终极可能需要更长的时间。
假如所有主机都在本地网络上,则 100 毫秒(--max-rtt-timeout 100ms)是一个合理的激进值。假如涉及路由,请先使用 ICMP ping 实用程序或更可能通过防火墙的自定义数据包天生器(如 Nping)对网络上的主机举行 ping。查看十个左右的数据包的最大来回时间。您可能盼望将 --initial-rtt-timeout 的来回时间翻倍,将 --max-rtt-timeout 的来回时间翻三倍或四倍。无论 ping 时间是多少,我通常都不会将最大 RTT 设置为低于 100 毫秒。我也不超过 1000 毫秒。
--min-rtt-timeout 是一个很少使用的选项,当网络非常不可靠以至于 Nmap 的默认值都过于激进时,它可能很有用。由于 Nmap 仅在网络看似可靠时才将超时时间减少到最小值,因此这种需求并不常见,应作为错误报告给 nmap-dev 邮件列表。
  1. nmap --min-rtt-timeout 100ms --max-rtt-timeout 500ms --initial-rtt-timeout 200ms 192.168.174.132
复制代码

64. --max-retries <numtries>

指定端口扫描探测的最大重传次数
假如 Nmap 没有收到端口扫描探测的相应,则可能意味着端口已被过滤。或者探测或相应可能只是在网络上丢失了。目标主机也可能启用了速率限定,从而暂时制止了相应。因此,Nmap 会通过重传初始探测再次实验。假如 Nmap 检测到网络可靠性较差,它可能会实验多次,然后再放弃端口。虽然这有利于进步准确性,但也会延长扫描时间。当性能至关紧张时,可以通过限定答应的重传次数来加快扫描速度。您甚至可以指定 --max-retries 0 来防止任何重传,但这仅实用于非正式调查等偶然错过端口和主机的情况。
默认(无 -T 模板)答应十次重传。假如网络看起来可靠且目标主机没有速率限定,Nmap 通常只举行一次重传。因此,即使将 --max-retries 降低到较低的值(例如 3),大多数目标扫描也不会受到影响。如许的值可以大大加快对慢速(速率受限)主机的扫描。当 Nmap 过早放弃端口时,您通常会丢失一些信息,但这可能比让 --host-timeout 逾期并丢失有关目标的所有信息更好。
  1. nmap --max-retries 10 192.168.174.132
复制代码

65. --host-timeout <time>

放弃速度慢的目标主机 - 颠末这么长时间后放弃目标
某些主机需要很时间才能完成扫描。这可能是由于性能不佳或不可靠的网络硬件或软件、数据包速率限定或限定性防火墙造成的。扫描主机中最慢的百分之几可能会占用大部分扫描时间。有时最好减少损失并最初跳过这些主机。指定 --host-timeout 以及您乐意等候的最长时间。例如,指定 30m 以确保 Nmap 不会在单个主机上浪费超过半小时的时间。请注意,Nmap 可能会在这半小时内同时扫描其他主机,因此这并不是完全的损失。超时的主机将被跳过。不会为该主机打印任何端口表、操作系统检测或版本检测结果。
特殊值 0 可用于表现“无超时”,可用于覆盖 T5 计时模板,该模板将主机超时设置为 15 分钟。
  1. nmap --host-timeout 30m 192.168.174.145
复制代码

66. --script-timeout <time>

虽然有些脚本可以在几分之一秒内完成,但其他脚本可能需要数小时或更长时间,详细取决于脚本的性子、传入的参数、网络和应用程序条件等。--script-timeout 选项设置脚本实行时间的上限。任何超过该时间的脚本实例都将被制止,而且不会显示任何输出。假如启用了调试 (-d),Nmap 将报告每次超时。对于主机和服务脚本,脚本实例仅扫描单个目标主机或端口,而且下一个实例的超时期限将重置。
特殊值 0 可用于表现“无超时”,可用于覆盖 T5 计时模板,该模板将脚本超时设置为 10 分钟。
  1. nmap --script "http-brute" --script-timeout 5m 192.168.174.132
复制代码

67. --scan-delay <time>; --max-scan-delay <time>

调整探测报文的时间间隔
此选项使 Nmap 在向给定主机发送的每次探测之间至少等候给定的时间。这在速率限定的情况下特别有用。Solaris 盘算机(以及很多其他盘算机)通常每秒仅用一条 ICMP 消息相应 UDP 扫描探测数据包。Nmap 发送的任何超过该时间的消息都是浪费。1s 的 --scan-delay 将使 Nmap 保持这种痴钝的速率。Nmap 会实验检测速率限定并相应地调整扫描延迟,但假如您已经知道哪种速率最有效,则明确指定它不会有什么坏处。
当 Nmap 向上调整扫描延迟以应对速率限定时,扫描速度会急剧变慢。--max-scan-delay 选项指定 Nmap 答应的最大延迟。较低的 --max-scan-delay 可以加快 Nmap 的速度,但这是有风险的。将此值设置得太低可能会导致数据包重新传输浪费,而且当目标实行严格的速率限定时可能会错过端口。
--scan-delay 的另一个用途是规避基于阈值的入侵检测和防备系统 (IDS/IPS)。此技术在名为“现实示例:绕过默认 Snort 2.2.0 规则”的部分中用于击败 Snort IDS 中的默认端口扫描检测器。大多数其他入侵检测系统都可以用同样的方式被击败。
  1. nmap --scan-delay 500ms --max-scan-delay 2s 192.168.174.132
复制代码
 

68. --min-rate <number>; --max-rate <number>

直接控制扫描速率
Nmap 的动态计时功能可以很好地找到合适的扫描速度。但是,有时您可能恰好知道网络的合适扫描速率,或者您可能必须保证扫描将在特定时间内完成。或者您可能必须制止 Nmap 扫描得太快。--min-rate--max-rate 选项就是为这些情况而计划的。
当指定 --min-rate 选项时,Nmap 将努力以与给定速率一样快或更快的速度发送数据包。该参数是一个正实数,表现每秒数据包的速率。例如,指定 --min-rate 300 意味着 Nmap 将实验将发送速率保持在每秒 300 个数据包或以上。假如条件答应,指定最小速率不会制止 Nmap 加快速度。
同样,--max-rate 将扫描的发送速率限定为给定的最大值。例如,使用 --max-rate 100 可将快速网络上的发送速度限定为每秒 100 个数据包。使用 --max-rate 0.1 可每十秒举行一个数据包的慢速扫描。同时使用 --min-rate--max-rate 可将速率保持在肯定范围内。
这两个选项是全局的,影响整个扫描,而不是单个主机。它们只影响端口扫描和主机发现扫描。其他功能(如操作系统检测)会实现自己的计时。
现实扫描速率可能低于所要求的最小值的情况有两种。第一种是最小值比 Nmap 可以发送的最快速度快,这取决于硬件。在这种情况下,Nmap 将尽可能快地发送数据包,但请注意,云云高的速率可能会导致准确性下降。第二种情况是 Nmap 没有东西可发送,例如在扫描竣事时,末了一个探测已发送,Nmap 正在等候它们超时或相应。在扫描竣事时或在主机组之间看到扫描速率下降是正常的。发送速率可能会暂时超过最大值以弥补不可预测的延迟,但平均而言,速率将保持在最大值或以下。
指定最小速率时应谨慎。扫描速度超过网络可以支持的速度可能会导致准确性下降。在某些情况下,使用更快的速率会使扫描花费的时间比使用较慢的速率更长。这是因为 Nmap 的自适应重传算法将检测由过高的扫描速率引起的网络拥塞,并增加重传次数以进步准确性。因此,即使以更高的速率发送数据包,总体上也会发送更多的数据包。假如您需要设置总扫描时间的上限,请使用 --max-retries 选项限定重传次数。
  1. nmap --min-rate 100ms --max-rate 500ms 192.168.174.132
复制代码

69. --defeat-rst-ratelimit

很多主机恒久以来不停使用速率限定来减少它们发送的 ICMP 错误消息(例如端口不可达错误)的数量。一些系统现在对它们天生的 RST(重置)数据包应用类似的速率限定。这会大大降低 Nmap 的速度,因为它会调整其时间以反映这些速率限定。您可以通过指定 --defeat-rst-ratelimit 告诉 Nmap 忽略这些速率限定(对于端口扫描,例如将无相应端口视为开放的 SYN 扫描)。
使用此选项可能会降低准确性,因为某些端口会显示无相应,因为 Nmap 没有等候足够长的时间来等候速率限定的 RST 相应。对于 SYN 扫描,无相应会导致端口被标志为已过滤,而不是我们在收到 RST 数据包时看到的关闭状态。当您只关心开放端口时,此选项很有用,区分关闭和过滤端口不值得花费额外的时间。
  1. nmap -sS --defeat-rst-ratelimit 192.168.174.132
复制代码

70. --defeat-icmp-ratelimit

--defeat-rst-ratelimit 类似,--defeat-icmp-ratelimit 选项以速度换取准确性,从而进步对限定 ICMP 错误消息速率的主机的 UDP 扫描速度。由于此选项导致 Nmap 不会延迟吸收端口不可达消息,因此无相应端口将被标志为关闭|过滤,而不是默认的打开|过滤。这只将现实通过 UDP 相应的端口视为打开。由于很多 UDP 服务不以这种方式相应,因此使用此选项出现不准确性的可能性比使用 --defeat-rst-ratelimit 更大。
  1. nmap -sU --defeat-icmp-ratelimit 192.168.174.132
复制代码
 

71. --nsock-engine iocp|epoll|kqueue|poll|select

欺压使用给定的 nsock IO 多路复用引擎。只有基于 select(2) 的后备引擎才保证在您的系统上可用。引擎以它们利用的 IO 管理工具的名称定名。当前实现的引擎是 epoll、kqueue、poll 和 select,但并非所有引擎都会出现在任何平台上。默认情况下,Nmap 将使用“最佳”引擎,即此列表中第一个受支持的引擎。使用 nmap -V 查看您的平台支持哪些引擎。
  1. nmap --nsock-engine epoll 192.168.174.145
复制代码
 

72. -T<0-5> | -T paranoid|sneaky|polite|normal|aggressive|insane

设置时间模板(越高越快)
虽然上一节中讨论的细粒度计时控制功能强大且有效,但有些人以为它们令人困惑。此外,选择适当的值有时可能比您实验优化的扫描花费更多时间。幸运的是,Nmap 提供了一种更简朴的方法,有六个计时模板。您可以使用 -T 选项及其编号(0-5)或名称指定它们。模板名称为 paranoid (0)、sneaky (1)、polite (2)、normal (3)、aggressive (4) 和 insane (5)。前两个用于 IDS 规避。Polite模式会减慢扫描速度以使用更少的带宽和目标呆板资源。正常模式是默认模式,因此 -T3 不实行任何操作。Aggressive模式通过假设您处于相当快速和可靠的网络上来加快扫描速度。末了,insane模式假设您处于一个非常快的网络上,或者乐意捐躯一些准确性来进步速度。
这些模板答应用户指定他们盼望的攻击水平,同时让 Nmap 选择精确的计时值。模板还会对现在尚不存在细粒度控制选项的某些速度举行渺小调整。例如,-T4 禁止 TCP 端口的动态扫描延迟超过 10 毫秒,而 -T5 将该值限定为 5 毫秒。模板可以与细粒度控制联合使用,您指定的细粒度控制将优先于该参数的计时模板默认值。我建议在扫描相当现代和可靠的网络时使用 -T4。即使添加细粒度控制,也要保留该选项,以便您从它启用的额外渺小优化中受益。
假如您使用的是不错的宽带或以太网连接,我建议始终使用 -T4。有些人喜欢 -T5,只管它对我来说太过激进。人们有时会指定 -T2,因为他们认为它不太可能使主机崩溃,或者因为他们认为自己总体上比力有礼貌。他们通常没故意识到 -T polite到底有多慢。他们的扫描时间可能比默认扫描长十倍。使用默认计时选项 (-T3) 时,呆板崩溃和带宽问题很少见,因此我通常建议谨慎的扫描器使用默认计时选项。省略版本检测比使用计时值更能减少这些问题。
虽然 -T0-T1 可能有助于避免 IDS 警报,但它们将花费非常长的时间扫描数千台呆板或端口。对于云云长的扫描,您可能更乐意设置所需的精确计时值,而不是依靠预设的 -T0-T1 值。
T0 的重要作用是序列化扫描,以便一次只扫描一个端口,并在发送每个探测之间等候五分钟。T1T2 类似,但它们在探测之间分别只等候 15 秒和 0.4 秒。T3 是 Nmap 的默认行为,此中包括并行化。 -T4 相当于 --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6,并将最大 TCP 和 SCTP 扫描延迟设置为 10ms。T5 相当于 --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --script-timeout 10m,并将最大 TCP 和 SCTP 扫描延迟设置为 5ms。T4T5 不会设置最大 UDP 扫描延迟,但可以使用 --max-scan-delay 选项举行设置。
  1. nmap -T5 192.168.174.145
复制代码

防火墙/IDS躲避和哄骗

73. -f;--mtu

需要root权限
报文分段;使用指定的 MTU - 分段数据包(可选,带给定的 MTU)
-f 选项使请求的扫描(包括主机发现扫描)使用微小的分片 IP 数据包。其想法是将 TCP 报头拆分为多个数据包,使数据包过滤器、入侵检测系统和其他麻烦更难检测到您正在做的事情。请小心使用此选项!有些程序很难处理这些微小的数据包。名为 Sniffit 的老式嗅探器在收到第一个片断后立刻出现分段故障。指定此选项一次,Nmap 会在 IP 报头后将数据包拆分为 8 个字节或更少的字节。因此,20 字节的 TCP 报头将被拆分为三个数据包。两个包含 8 个字节的 TCP 报头,一个包含末了 4 个字节。固然,每个片断也有一个 IP 报头。再次指定 -f 以使用每个片断 16 个字节(减少片断数量)。或者,您可以使用 --mtu 选项指定自己的偏移巨细。假如您使用 --mtu,请不要同时指定 -f。偏移必须是 8 的倍数。虽然碎片数据包不会被数据包过滤器和将所有 IP 碎片列队的防火墙(例如 Linux 内核中的 CONFIG_IP_ALWAYS_DEFRAG 选项)拦截,但某些网络无法承受由此造成的性能损失,因此将其禁用。其他网络无法启用此功能,因为碎片可能会通过不同的路由进入其网络。某些源系统会在内核中对传出的数据包举行碎片整理。带有 iptables 连接跟踪模块的 Linux 就是如许一个例子。在 Wireshark 等嗅探器运行时举行扫描,以确保发送的数据包是碎片化的。假如您的主机操作系统导致问题,请实验使用 --send-eth 选项绕过 IP 层并发送原始以太网帧。
碎片仅支持 Nmap 的原始数据包功能,此中包括 TCP 和 UDP 端口扫描(连接扫描和 FTP 反弹扫描除外)和操作系统检测。版本检测和 Nmap 脚本引擎等功能通常不支持碎片,因为它们依靠于主机的 TCP 堆栈与目标服务举行通信。
  1. nmap -f 192.168.174.132
复制代码
 

  1. nmap --mtu 64 192.168.174.132
复制代码
 

74. -D <decoy1>[,<decoy2>][,ME][,...]

使用诱饵隐藏扫描
实行诱饵扫描,使长途主机认为您指定为诱饵的主机也在扫描目标网络。因此,他们的 IDS 可能会报告来自唯一 IP 地址的 5-10 个端口扫描,但他们不知道哪个 IP 正在扫描它们,哪些是无辜的诱饵。虽然可以通过路由器路径跟踪、相应丢弃和其他自动机制来破解这一点,但它通常是隐藏 IP 地址的有效技术。
用逗号分隔每个诱饵主机,您可以选择使用 ME 作为诱饵之一来表现您的真实 IP 地址的位置。假如您将 ME 放在第六位或更靠后的位置,一些常见的端口扫描检测器(如 Solar Designer's excellent Scanlogd)不太可能显示您的 IP 地址。假如您不使用 ME,Nmap 会将您置于随机位置。您还可以使用 RND 天生随机的非保留 IP 地址,或使用 RND:<number> 天生 <number> 个地址。
请注意,您用作诱饵的主机应该处于启动状态,否则您可能会心外地 SYN 泛洪您的目标。此外,假如网络上只有一个主机处于现实启动状态,则很轻易确定哪个主机正在扫描。您可能盼望使用 IP 地址而不是名称(如许诱饵网络就不会在其名称服务器日记中看到您)。现在,只有 IPv4 支持随机 IP 地址天生
诱饵既用于初始主机发现扫描(使用 ICMP、SYN、ACK 或其他),也用于现实端口扫描阶段。诱饵还用于长途操作系统检测 (-O)。诱饵不实用于版本检测或 TCP 连接扫描。当扫描延迟见效时,延迟是在每批欺骗探测之间欺压实行的,而不是在每个单独的探测之间欺压实行的。由于诱饵是一次性批量发送的,因此它们可能会暂时违背拥塞控制限定。
值得注意的是,使用过多诱饵可能会减慢扫描速度,甚至可能降低扫描准确性。此外,一些 ISP 会过滤掉您的欺骗数据包,但很多 ISP 根本不限定欺骗 IP 数据包。
  1. nmap -D 192.168.174.128,192.168.174.129,192.168.174.145 192.168.174.132
复制代码

  1. nmap -D RND:5,ME 192.168.174.132
复制代码

73. -S <IP_Address>

源地址哄骗
在某些情况下,Nmap 可能无法确定您的源地址(假如是这种情况,Nmap 会告诉您)。在这种情况下,使用 -S 和您盼望通过其发送数据包的接口的 IP 地址。
此标志的另一种可能用途是欺骗扫描,使目标认为其他人正在扫描它们。想象一下一家公司被竞争对手反复举行端口扫描!这种用法通常需要 -e 选项和 -Pn。请注意,您通常不会收到复兴数据包(它们将被发送到您正在欺骗的 IP),因此 Nmap 不会天生有用的报告。
74. -e <interface>

使用指定接口
告诉 Nmap 在哪个接口上发送和吸收数据包。Nmap 应该可以或许自动检测到这一点,但假如无法检测到,它会告诉您。
  1. nmap -sS -S 192.168.174.134 -e eth0 -Pn 192.168.174.132
复制代码

75. --source-port <portnumber>; -g <portnumber>

源端口哄骗
一个令人惊讶的常见错误配置是仅根据源端口号信任流量。很轻易理解这是怎么发生的。管理员会设置一个崭新的防火墙,结果却收到大量应用程序制止工作的不知感恩的用户的投诉。特别是,DNS 可能会被粉碎,因为来自外部服务器的 UDP DNS 复兴无法再进入网络。FTP 是另一个常见的例子。在自动 FTP 传输中,长途服务器实验建立与客户端的连接以传输请求的文件。
这些问题的安全解决方案是存在的,通常以应用程序级署理或协议剖析防火墙模块的形式出现。不幸的是,也有更简朴、不安全的解决方案。注意到 DNS 复兴来自端口 53,而自动 FTP 来自端口 20,很多管理员陷入了简朴地答应来自这些端口的传入流量的陷阱。他们通常认为没有攻击者会注意到并利用此类防火墙漏洞。在其他情况下,管理员认为这只是一个短期的权宜之计,直到他们可以实行更安全的解决方案。然后他们就忘记了安全升级。
陷入这种陷阱的不但仅是工作过分的网络管理员。很多产物都附带了这些不安全的规则。甚至微软也犯不对误。Windows 2000 和 Windows XP 附带的 IPsec 过滤器包含一个隐式规则,答应来自端口 88(Kerberos)的所有 TCP 或 UDP 流量。在另一个众所周知的案例中,Zone Alarm 个人防火墙 2.1.25 之前的版本答应任何源端口为 53(DNS)或 67(DHCP)的传入 UDP 数据包。
Nmap 提供 -g--source-port 选项(它们是等效的)来利用这些缺点。只需提供一个端口号,Nmap 就会尽可能从该端口发送数据包。大多数使用原始套接字的扫描操作(包括 SYN 和 UDP 扫描)都完全支持该选项。值得注意的是,该选项对使用正常操作系统套接字的任何操作均无效,包括 DNS 请求、TCP 连接扫描、版本检测和脚本扫描。设置源端口对操作系统检测也不起作用,因为 Nmap 必须使用不同的端口号才能使某些操作系统检测测试正常工作。
  1. nmap -sS --source-port 443 192.168.174.145
复制代码
 

76. --data <hex string>

将自定义二进制数据附加到已发送的数据包
此选项答应您将二进制数据作为有效负载包含在已发送的数据包中。<hex string> 可以指定为以下任何格式:0xAABBCCDDEEFF<...>、AABBCCDDEEFF<...> 或 \xAA\xBB\xCC\xDD\xEE\xFF<...>。使用示例为 --data 0xdeadbeef--data \xCA\xFE\x09。请注意,假如您指定像 0x00ff 如许的数字,则不会实行字节次序转换。请确保以吸收器盼望的字节次序指定信息。
  1. nmap -sS --data 0xdeadbeef 192.168.174.132
复制代码

77. --data-string <string>

需要root权限
将自定义字符串附加到已发送的数据包
此选项答应您在已发送的数据包中包含通例字符串作为有效负载。<string> 可以包含任何字符串。但是,请注意,某些字符可能取决于您系统的语言情况,而且吸收方可能看不到相同的信息。此外,请确保将字符串括在双引号中,并从 shell 中转义任何特殊字符。示例:--data-string “Scan conducted by Security Ops, extension 7192”或 --data-string “Ph34r my l33t skills”。请记着,除非他们使用嗅探器或自定义 IDS 规则细致​​监视网络,否则没有人可能真正看到此选项留下的任何品评。
  1. nmap --data-string "Scan conducted by Security Ops, extension 7192" 192.168.174.145
复制代码

78. --data-length <number>

需要root权限
发送报文时 附加随机数据
通常,Nmap 发送的数据包仅包含标头。因此,其 TCP 数据包通常为 40 个字节,而 ICMP 回显请求仅为 28 个字节。某些 UDP 端口和 IP 协议默认会获得自定义负载。此选项告诉 Nmap 将给定命量的随机字节附加到其发送的大多数数据包,而且不使用任何特定于协议的负载。(使用 --data-length 0 表现不使用随机或特定于协议的负载。操作系统检测 (-O) 数据包不受影响,因为那里的准确性需要探测一致性,但大多数 ping 和端口扫描数据包都支持这一点。这会稍微减慢速度,但可以使扫描稍微不那么显眼。
  1. nmap --data-length 128 192.168.174.145
复制代码

79. --ip-options <R|S [route]|L [route]|T|U ... >; --ip-options <hex string>

需要root权限
发送带有指定 IP 选项的数据包
IP 协议提供了几个可以放置在数据包头中的选项。与无处不在的 TCP 选项不同,出于实用性和安全性考虑,IP 选项很少见。事实上,很多互联网路由器会制止最伤害的选项,例如源路由。然而,在某些情况下,选项仍然可用于确定和操纵到目标呆板的网络路由。例如,即使更传统的跟踪路由样式方法失败,您也可以使用记载路由选项来确定到目标​​的路径。或者,假如您的数据包被某个防火墙丢弃,您可以使用严格或宽松的源路由选项指定不同的路由。
指定 IP 选项的最有效方法是简朴地将值作为 --ip-options 的参数传递。在每个十六进制数字前面加上 \x,然后加上两位数字。您可以通过在特定字符后跟星号并指定重复次数来重复这些字符。例如,\x01\x07\x04\x00*36\x01 是一个包含 36 个 NUL 字节的十六进制字符串。
Nmap 还提供了一种指定选项的快捷机制。只需传递字母 R、T 或 U 即可分别请求记载路由、记载​​时间戳或同时请求这两个选项。可以使用 L 或 S 后跟空格,然后是空格分隔的 IP 地址列表来指定疏松或严格的源路由。
假如您盼望查看发送和吸收的数据包中的选项,请指定 --packet-trace。有关使用 Nmap 的 IP 选项的更多信息和示例,请参阅 https://seclists.org/nmap-dev/2006/q3/52。
  1. nmap --ip-options R 192.168.174.1
复制代码

  1. nmap --ip-options T 192.168.174.1
复制代码

  1. nmap --ip-options U 192.168.174.1
复制代码

  1. nmap --ip-options "\x01\x07\x04\x00*36\x01" 192.168.174.145
复制代码

80. --ttl <value>

需要root权限
设置IP time-to-live域
设置IPv4报文的time-to-live域为指定的值。
  1. nmap --ttl 64 192.168.174.145
复制代码
 

81. --randomize-hosts

对目标主机的次序随机排列
告诉 Nmap 在扫描每组主机(最多 16384 个主机)之前对其举行打乱。这可以使扫描对各种网络监控系统不那么明显,尤其是当您将其与慢速计时选项联合使用时。假如您想对较大的组巨细举行随机化,请增加 nmap.h 中的 PING_GROUP_SZ 并重新编译。另一种解决方案是使用列表扫描(-sL -n -oN <filename>)天生目标 IP 列表,使用 Perl 脚本对其举行随机化,然后使用 -iL 将整个列表提供给 Nmap。
  1. nmap --randomize-hosts 192.168.174.145
复制代码

82. --spoof-mac <MAC address, prefix, or vendor name>

MAC地址哄骗
要求 Nmap 使用给定的 MAC 地址来发送所有原始以太网帧。此选项隐含 --send-eth 以确保 Nmap 现实发送以太网级数据包。给定的 MAC 可以采用多种格式。假如它只是数字 0,Nmap 将为会话选择一个完全随机的 MAC 地址。假如给定的字符串是偶数个十六进制数字(每对数字可选地用冒号分隔),Nmap 将使用这些数字作为 MAC。假如提供的十六进制数字少于 12 个,Nmap 将用随机值填充六个字节的其余部分。假如参数不是零或十六进制字符串,Nmap 将通过 nmap-mac-prefixes 查找包含给定字符串的供应商名称(不区分巨细写)。假如找到匹配项,Nmap 将使用供应商的 OUI(三字节前缀)并随机填充剩余的三个字节。有效的 --spoof-mac 参数示例包括 Apple、0、01:02:03:04:05:06、deadbeefcafe、0020F2 和 Cisco。此选项仅影响原始数据包扫描(例如 SYN 扫描或操作系统检测),而不影响面向连接的功能(例如版本检测或 Nmap 脚本引擎)。
  1. nmap --spoof-mac Apple 192.168.174.132
  2. nmap --spoof-mac 0 192.168.174.132
  3. nmap --spoof-mac 01:02:03:04:05:06 192.168.174.132
  4. nmap --spoof-mac deadbeefcafe 192.168.174.132
  5. nmap --spoof-mac 0020F2 192.168.174.132
  6. nmap --spoof-mac Cisco 192.168.174.132
复制代码

83. --proxies <Comma-separated list of proxy URLs>

通过署理链中继 TCP 连接 - 通过 HTTP/SOCKS4 署理中继连接
要求 Nmap 通过提供的一个或多个 HTTP 或 SOCKS4 署理链与终极目标建立 TCP 连接。署理可以资助隐藏扫描的真实来源或规避某些防火墙限定,但它们可能会通过增加延迟来妨碍扫描性能。用户可能需要相应地调整 Nmap 超时和其他扫描参数。特别是,较低的 --max-parallelism 可能会有所资助,因为某些署理拒绝处理 Nmap 默认打开的并发连接数。
此选项将署理列表作为参数,以 proto://host:port 格式的 URL 表现。使用逗号分隔链中的节点 URL。尚不支持身份验证。有效协议为 HTTP 和 SOCKS4。
警告:此功能仍在开发中,而且有范围性。它是在 nsock 库中实现的,因此对扫描的 ping、端口扫描和操作系统发现阶段没有影响。现在只有 NSE 和版本扫描可从此选项中受益 - 其他功能可能会泄漏您的真实地址。尚不支持 SSL 连接,也不支持署理端 DNS 剖析(主机名始终由 Nmap 剖析)。
  1. nmap --proxies http://192.168.174.129:7890 192.168.174.132
复制代码

84. --badsum

发送带有伪造 TCP/UDP 校验和的数据包
要求 Nmap 对发送到目标主机的数据包使用无效的 TCP、UDP 或 SCTP 校验和。由于几乎所有主机 IP 堆栈都会精确丢弃这些数据包,因此收到的任何相应都可能来自没有验证校验和的防火墙或 IDS。
  1. nmap -Pn --badsum 192.168.174.129
复制代码

85. --adler32

使用已弃用的 Adler32 而不是 CRC32C 举行 SCTP 校验
要求 Nmap 使用已弃用的 Adler32 算法来盘算 SCTP 校验和。假如未指定 --adler32,则使用 CRC-32C(Castagnoli)。RFC 2960 最初将 Adler32 定义为 SCTP 的校验和算法;RFC 4960 后来将 SCTP 校验和重新定义为使用 CRC-32C。当前的 SCTP 实现应该使用 CRC-32C,但为了从旧的、传统的 SCTP 实现中获取相应,最好使用 Adler32。
  1. nmap --adler32 192.168.174.145
复制代码
 

由于篇幅缘故原由,请继续看下一章节。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表