【总结】NMAP详细手册

备注

2024/01/25 星期四
很长时间没有用过nmap了,突然使用发现很多参数想不起来了,为了省去每次查找的时间在这里记录一下,本文内容基本来自官网的翻译,由我进行部分修改和校对

一、概述

Nmap(“Network Mapper”)是一个开源的网络探索和安全审计工具。虽然针对单个主机也很好用,但是它在设计时是用来快速扫描大型网络的。Nmap以新颖的方式使用原始IP数据包来确定网络上哪些主机可用、这些主机提供哪些服务(应用名称和版本)、它们运行哪些操作系统(及操作系统版本)、使用什么类型的数据包过滤器/防火墙,以及其他几十种特性。虽然Nmap通常用于安全审计,但许多系统和网络管理员也会使用它处理日常任务(如网络排查、服务升级计划管理、监控主机或服务的运行时间)。

Nmap的输出是一个扫描目标列表,根据使用的选项,每个目标上还有附加信息。其中一个关键信息是“有趣的端口表”。该表列出了端口号和协议、服务名称及状态。状态可以是开放、过滤、关闭或未过滤。开放意味着目标机器上的一个应用正在监听该端口上的连接/数据包。过滤意味着防火墙、过滤器或其他网络障碍阻塞了端口,以至于Nmap无法判断它是开放还是关闭。关闭的端口没有应用在监听,尽管它们随时可能开放。当端口对Nmap的探测做出响应,但Nmap无法确定它们是开放还是关闭时,端口被分类为未过滤。当Nmap无法确定描述端口的两种状态中的哪一种时,它会报告状态组合开放|过滤和关闭|过滤。当请求版本检测时,端口表还可能包括软件版本详细信息。当请求IP协议扫描(-sO)时,Nmap提供支持的IP协议信息,而不是监听端口。

除了有趣的端口表外,Nmap还可以提供有关目标的更多信息,包括反向DNS名称、操作系统猜测、设备类型和MAC地址。

一个典型的Nmap扫描在示例15.1中展示。在这个例子中使用的唯一Nmap参数是-A,用于启用操作系统和版本检测、脚本扫描和路由跟踪;-T4用于更快的执行;然后是主机名。

二、参数摘要

用法:nmap [扫描类型] [选项] {目标说明}
目标说明:
可以使用域名、IP 地址、网络等。
例如:scanme.nmap.org,microsoft.com/24,192.168.0.1;10.0.0-255.1-254
-iL :从主机/网络列表中输入
-iR :选择随机目标
–exclude <host1[,host2][,host3],…>:排除主机/网络
–excludefile <exclude_file>:从文件中排除列表
主机发现:
-sL:列表扫描 - 只列出要扫描的目标
-sn:Ping 扫描 - 禁用端口扫描
-Pn:将所有主机视为在线 - 跳过主机发现
-PS/PA/PU/PY[portlist]:TCP SYN/ACK,UDP 或 SCTP 探测到给定端口
-PE/PP/PM:ICMP 回显、时间戳和子网掩码请求探测
-PO[protocol list]:IP 协议 Ping
-n/-R:不执行 DNS 解析/始终解析 [默认:有时解析]
–dns-servers <serv1[,serv2],…>:指定自定义 DNS 服务器
–system-dns:使用操作系统的 DNS 解析器
–traceroute:跟踪到每个主机的跳数路径
扫描技术:
-sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon 扫描
-sU:UDP 扫描
-sN/sF/sX:TCP Null,FIN 和 Xmas 扫描
–scanflags :自定义 TCP 扫描标志
-sI <zombie host[:probeport]>:闲置扫描
-sY/sZ:SCTP INIT/COOKIE-ECHO 扫描
-sO:IP 协议扫描
-b :FTP 弹跳扫描
端口规范和扫描顺序:
-p :只扫描指定的端口
例如:-p22;-p1-65535;-p U:53,111,137,T:21-25,80,139,8080,S:9
–exclude-ports :从扫描中排除指定的端口
-F:快速模式 - 扫描比默认扫描更少的端口
-r:按顺序扫描端口 - 不随机化
–top-ports :扫描最常见的个端口
–port-ratio :扫描比更常见的端口
服务/版本检测:
-sV:探测开放端口以确定服务/版本信息
–version-intensity :设置从0(轻量级)到9(尝试所有探测)的级别
–version-light:限制最有可能的探测(强度2)
–version-all:尝试每个探测(强度9)
–version-trace:显示详细的版本扫描活动(用于调试)
脚本扫描:
-sC:等同于 --script=default
–script=: <Lua 脚本> 是一个逗号分隔的目录、脚本文件或脚本类别列表
–script-args=<n1=v1,[n2=v2,…]>:为脚本提供参数
–script-args-file=filename:在文件中提供 NSE 脚本参数
–script-trace:显示发送和接收的所有数据
–script-updatedb:更新脚本数据库
–script-help=:显示关于脚本的帮助信息
<Lua 脚本> 是一个逗号分隔的脚本文件或脚本类别列表。
操作系统检测:
-O:启用操作系统检测
–osscan-limit:将操作系统检测限制为有希望的目标
–osscan-guess:更积极地猜测操作系统
时间和性能:

二、目标规范

Nmap命令行中除选项(或选项参数)以外的所有内容都被视为目标主机规范。最简单的情况是指定一个要扫描的目标IP地址或主机名。

当指定主机名作为目标时,它将通过DNS解析来确定要扫描的IP地址。如果该名称解析为多个IP地址,则只扫描第一个IP地址。要使Nmap扫描所有解析的地址而不仅仅是第一个,请使用–resolve-all选项。

有时您希望扫描相邻主机的整个网络。为此,Nmap支持CIDR样式的寻址。您可以在IP地址或主机名后附加/,Nmap将扫描其中前与给定的参考IP或主机名相同的所有IP地址。例如,192.168.10.0/24将扫描192.168.10.0(二进制:11000000 10101000 00001010 00000000)和192.168.10.255(二进制:11000000 10101000 00001010 11111111)之间的256个主机(包括两端)。192.168.10.40/24将扫描完全相同的目标。假设主机scanme.nmap.org的IP地址为64.13.134.52,则规范scanme.nmap.org/16将扫描64.13.0.0和64.13.255.255之间的65536个IP地址。允许的最小值是/0,它将针对整个互联网。IPv4的最大值是/32,它只扫描命名的主机或IP地址,因为所有地址位都是固定的。IPv6的最大值是/128,它执行相同的操作。

CIDR表示法很短,但并不总是足够灵活。例如,您可能希望扫描192.168.0.0/16,但跳过任何以.0或.255结尾的IP,因为它们可能用作子网网络和广播地址。Nmap通过八位数范围寻址支持此功能。您可以指定每个八位数的逗号分隔列表或范围,而不是指定普通的IP地址。例如,192.168.0-255.1-254将跳过以.0或.255结尾的范围内的所有地址,而192.168.3-5,7.1将扫描四个地址:192.168.3.1、192.168.4.1、192.168.5.1和192.168.7.1。范围的任一侧都可以省略;默认值在左边是0,在右边是255。单独使用-与0-255相同,但请记住在第一个八位数中使用0-,以便目标规范不像命令行选项一样。范围不必限于最后一个八位数:指定器0-255.0-255.13.37将为所有以13.37结尾的IP地址执行全网扫描。这种广泛的采样对于互联网调查和研究非常有用。

IPv6地址可以通过其完全合格的IPv6地址或主机名进行指定,也可以使用子网的CIDR表示法。目前还不支持八位数范围的IPv6。

具有非全局范围的IPv6地址需要具有区域ID后缀。在Unix系统上,这是一个百分号后跟一个接口名称;完整的地址可能是fe80::a8bb:ccff:fedd:eeff%eth0。在Windows上,使用接口索引号代替接口名称:fe80::a8bb:ccff:fedd:eeff%1。您可以通过运行命令netsh.exe interface ipv6 show interface查看接口索引列表。

Nmap在命令行上接受多个主机规范,它们不需要是相同类型的。命令nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.-将按预期运行。

虽然目标通常在命令行上指定,但以下选项也可用于控制目标选择:

-iL(从列表中输入)
从读取目标规范。在命令行上传递大量主机往往很麻烦,但这是一个常见的需求。例如,您的DHCP服务器可能导出了一个包含10,000个当前租约的列表,您希望对其进行扫描。或者,您想扫描除了那些使用未经授权的静态IP地址的主机以外的所有IP地址。只需生成要扫描的主机列表,并将该文件名作为-iL选项的参数传递给Nmap。条目可以是Nmap在命令行上接受的任何格式(IP地址、主机名、CIDR、IPv6或八位数范围)。每个条目必须用一个或多个空格、制表符或新行分隔。如果您希望Nmap从标准输入而不是实际文件中读取主机,则可以将连字符(-)指定为文件名。

输入文件可以包含从#开始并延伸到行尾的注释。

-iR(选择随机目标)
对于互联网调查和其他研究,您可能希望随机选择目标。 参数告诉Nmap要生成多少个IP地址。自动跳过不需要的IP地址(如某些私有、多播或未分配的地址范围)。可以指定参数0进行无限期扫描。请记住,某些网络管理员对其网络的未经授权扫描可能感到不满,并可能投诉。自行决定使用此选项!如果您在一个下雨的下午非常无聊,请尝试使用命令nmap -Pn -sS -p 80 -iR 0 --open来查找随机Web服务器以进行浏览。

–exclude[,[,…]](排除主机/网络)
指定要从扫描中排除的目标列表,即使它们是您指定的整个网络范围的一部分也是如此。您传递的列表使用正常的Nmap语法,因此它可以包括主机名、CIDR网络块、八位数范围等。当您希望扫描的网络包括不可接触的关键任务服务器、已知对端口扫描反应不良的系统或由其他人管理的子网时,这可能很有用。

–excludefile<exclude_file>(从文件中排除列表)
除了在命令行上提供排除的目标外,此选项还提供相同的功能,但是已在换行符、空格或制表符分隔的<exclude_file>中提供了被排除的目标。

排除文件可以包含从#开始并延伸到行尾的注释。

-n(禁用DNS解析)
告诉Nmap永远不要对其发现的活动IP地址进行反向DNS解析。由于DNS服务器的不稳定性或慢速可能导致扫描速度变慢,因此使用此选项可确保快速扫描。但是,请注意,禁用DNS解析可能会导致一些Nmap功能失效,例如OS检测和服务/版本探测,这些功能通常需要获取主机名。

–system-dns(使用系统DNS解析器)
当禁用DNS解析时,可以使用此选项将DNS解析委托给系统的DNS解析器而不是使用Nmap的内部解析器。这在某些情况下可能比Nmap的解析器更可靠,但是它需要正确配置系统的DNS解析器,否则可能导致扫描失败或缓慢。

–dns-servers[,[,…]](指定DNS服务器)
如果您不想使用系统的DNS解析器,而是希望指定特定的DNS服务器,则可以使用此选项。您可以指定一个或多个以逗号分隔的IP地址或主机名。Nmap将尝试使用每个DNS服务器,以查找目标主机名的IP地址,直到找到一个有效响应为止。

–dns-server-file(从文件中指定DNS服务器)
除了在命令行上指定DNS服务器之外,此选项还提供相同的功能,但是已在换行符、空格或制表符分隔的中提供了DNS服务器列表。

DNS服务器文件可以包含从#开始并延伸到行尾的注释。

–data-length(设置数据包长度)
该选项允许您指定发送到目标主机的数据包的大小。默认情况下,Nmap发送一个最小且有效负载为空的数据包。通过增加数据包大小,您可以更好地测试网络性能和发现隐藏的设备。但是,较大的数据包通常需要更多时间和带宽,可能会降低扫描速度。此选项的参数可以采用字节、千字节或兆字节的格式表达,例如–data-length 1000, --data-length 10K或–data-length 1M。

–mtu(设置最大传输单元)
Nmap使用MTU(最大传输单元)值来确定能够匹配网络中所有链路层设备的最大数据包大小。如果Nmap发送的数据包比网络中某些链路层设备的MTU值大,则数据包将被分成较小的片段,这可能会降低扫描速度。因此,通过使用此选项,可以手动设置MTU值,以便Nmap可以生成适当大小的数据包。

–scan-delay

–max-retries(设置最大重试次数)
Nmap在发送数据包时,如果未收到响应,则会尝试重新发送数据包。该选项允许您指定Nmap应尝试多少次重新发送数据包。默认值为10,但是在网络不稳定或目标地址错误的情况下,可以增加此值以增加扫描的成功率。请注意,增加重试次数可能会导致扫描时间增加。

–host-timeout

这些是Nmap中控制目标选择和扫描行为的一些常见选项。通过熟悉这些选项,您可以更好地控制Nmap扫描的目标和速度,从而使扫描更加有针对性和高效。

三、主机发现

任何网络侦察任务中的第一步就是将(有时是庞大的)IP范围缩减到活动或有趣的主机列表。扫描每个IP地址的每个端口是缓慢且通常是不必要的。当然,一个主机是否有趣在很大程度上取决于扫描的目的。网络管理员可能只对运行特定服务的主机感兴趣,而安全审计人员可能关心具有IP地址的每个设备。管理员可能愿意仅使用ICMP ping来定位内部网络上的主机,而外部渗透测试人员可能会使用多种探测方法的组合,以企图规避防火墙限制。

由于主机发现需求如此多样,Nmap提供了各种各样的选项来定制使用的技术。主机发现有时被称为ping扫描,但它远远超出了与广泛使用的ping工具相关的简单ICMP回显请求数据包。用户可以使用列表扫描(-sL)或禁用主机发现(-Pn),或者使用任意组合的多端口TCP SYN/ACK、UDP、SCTP INIT和ICMP探测来跳过发现步骤。这些探测的目标是引起响应,表明IP地址实际上是活动的(正在被主机或网络设备使用)。在许多网络中,任何给定时间只有很小一部分IP地址是活动的。这在私有地址空间(如10.0.0.0/8)中特别常见。该网络有1600万个IP,但我见过有不到一千台机器的公司在使用它。主机发现可以在稀疏分配的IP地址海中找到这些机器。

如果没有给出主机发现选项,Nmap将发送ICMP回显请求、对443端口发送TCP SYN数据包、对80端口发送TCP ACK数据包,以及一个ICMP时间戳请求。(对于IPv6,ICMP时间戳请求被省略,因为它不是ICMPv6的一部分。)这些默认设置等同于-PE -PS443 -PA80 -PP选项。例外情况是ARP(对于IPv4)和邻居发现(对于IPv6)扫描,这些扫描用于本地以太网网络上的任何目标。对于非特权的Unix shell用户,默认探测是使用connect系统调用对端口80和443发送SYN数据包。当扫描本地网络时,这种主机发现通常是足够的,但建议对安全审计使用更全面的一组发现探针。

-P选项(选择ping类型)可以组合使用。您可以通过使用不同的TCP端口/标志和ICMP代码发送多种探针类型,从而增加穿透严格防火墙的机会。还要注意,即使指定了其他-P选项,对于本地以太网网络上的目标,ARP/邻居发现也会默认进行,因为这几乎总是更快且更有效的。

默认情况下,Nmap首先进行主机发现,然后对确定在线的每个主机执行端口扫描。即使指定了非默认的主机发现类型(如UDP探测(-PU)),这也是正确的。阅读-sn选项以了解如何仅执行主机发现,或使用-Pn跳过主机发现并对所有目标地址进行端口扫描。以下选项控制主机发现:

-sL(列表扫描)
列表扫描是主机发现的一种退化形式,它仅列出指定网络的每个主机,而不向目标主机发送任何数据包。默认情况下,Nmap仍然对主机进行反向DNS解析,以了解其名称。简单的主机名提供了多少有用的信息常常令人惊讶。例如,fw.chi是某家芝加哥公司的防火墙的名称。Nmap还报告IP地址的总数。列表扫描是一个很好的健全检查,以确保您对目标拥有适当的IP地址。如果主机具有您不认识的域名,值得进一步调查,以防止扫描错误的公司网络。

由于目标是简单地打印目标主机的列表,因此无法将更高级别功能的选项(如端口扫描、操作系统检测或主机发现)与此结合使用。如果您希望在执行此类更高级别功能的同时禁用主机发现,请阅读关于-Pn(跳过主机发现)选项。

-sn(无端口扫描)
此选项告诉Nmap在主机发现后不进行端口扫描,并且仅打印出对主机发现探测有响应的可用主机。这通常被称为“ping扫描”,但您还可以请求执行traceroute和NSE主机脚本。这通常比列表扫描多了一步,经常用于相同的目的。它允许轻松侦察目标网络,而不会引起太多注意。对攻击者而言,知道有多少台主机是活动的比扫描每个IP和主机名的列表更有价值。

系统管理员通常也会发现此选项有价值。它可以轻松地用于计算网络上的可用机器数量或监视服务器的可用性。这通常被称为ping扫描,并且比ping广播地址更可靠,因为许多主机不会响应广播查询。

使用-sn进行的默认主机发现包括ICMP回显请求、对443端口进行TCP SYN、对80端口进行TCP ACK,以及默认情况下的ICMP时间戳请求。当非特权用户执行时,只发送SYN数据包(使用connect调用)到目标主机的80和443端口。当特权用户尝试扫描本地以太网网络上的目标主机时,将使用ARP请求,除非指定了–send-ip。-sn选项可以与任何发现探针类型(-P*选项)结合使用,以提供更大的灵活性。如果使用了任何这些探针类型和端口号选项,则默认探针将被覆盖。建议在源主机运行Nmap和目标网络之间放置了严格的防火墙时,使用这些高级技术。否则,在防火墙丢弃探测或其响应时,可能会错过主机。

在Nmap的早期版本中,-sn被称为-sP。

-Pn(无ping)
此选项完全跳过主机发现阶段。通常,Nmap使用此阶段来确定用于更重的扫描的活动机器,并评估网络的速度。默认情况下,Nmap仅对确定处于活动状态的主机执行较重的探测,如端口扫描、版本检测或操作系统检测。通过-Pn禁用主机发现会导致Nmap尝试对指定的每个目标IP地址执行请求的扫描功能。因此,如果命令行中指定了/16大小的网络,将扫描所有65,536个IP地址。与列表扫描一样,将跳过适当的主机发现,但不会停止并打印目标列表,而是继续执行所请求的功能,就好像每个目标IP地址都是活动的。将使用默认的时间参数,这可能导致扫描速度较慢。要跳过主机发现和端口扫描,同时允许NSE运行,请使用两个选项-Pn -sn。

对于本地以太网网络上的机器,仍将执行ARP扫描(除非指定了–disable-arp-ping或–send-ip),因为Nmap需要MAC地址来进一步扫描目标主机。在Nmap的早期版本中,-Pn是-P0和-PN。

-PS (TCP SYN Ping)
此选项发送一个带有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数据包作出TCP三次握手的第二步。运行Nmap的主机然后通过发送一个RST而不是发送一个ACK数据包来终止初生的连接,后者将完成三次握手并建立完整的连接。RST数据包是由运行Nmap的主机的内核在响应意外的SYN/ACK时发送的,而不是由Nmap本身发送的。

Nmap不在乎端口是打开还是关闭。先前讨论的RST或SYN/ACK响应告诉Nmap主机是活动的和响应的。

在Unix系统上,通常只有特权用户root才能发送和接收原始TCP数据包。对于非特权用户,将自动使用connect系统调用对每个目标端口进行尝试。这会发送一个SYN数据包到目标主机,以尝试建立连接。如果connect很快返回成功或ECONNREFUSED失败,则底层TCP堆栈必须已收到SYN/ACK或RST,且主机标记为活动。如果连接尝试一直挂起直到达到超时,主机将被标记为未启动。

-PA (TCP ACK Ping)
TCP ACK ping与刚才讨论的SYN ping非常相似。不同之处(您可能已经猜到)在于将设置TCP ACK标志而不是SYN标志。这样的ACK数据包声称正在确认已建立的TCP连接中的数据,但实际上并没有这样的连接。因此,远程主机应始终以RST数据包回应,从而在这个过程中披露它们的存在。

-PA选项使用与SYN探测相同的默认端口(80),并且也可以采用与先前讨论的-SY和-PY选项相同格式的目的端口列表。如果非特权用户尝试此操作,则将使用先前讨论的连接绕过方法。这种绕过方法并不完美,因为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探测。

-PU (UDP Ping)
另一种主机发现选项是UDP ping,它向指定的端口发送UDP数据包。对于大多数端口,数据包将是空的,尽管有些使用了更有可能引发响应的协议特定负载。负载是在nmap-service-probes文件中定义的服务和版本检测中使用的相同探测。数据包内容还可以通过–data、–data-string和–data-length选项进行影响。

端口列表与先前讨论的-PS和-PA选项的格式相同。如果未指定端口,则默认端口为40125。可以在编译时通过更改nmap.h中的DEFAULT_UDP_PROBE_PORT_SPEC配置此默认值。默认情况下使用非常罕见的端口,因为发送到打开端口通常是不希望进行的。

在目标机器上关闭的端口上触发UDP探测应该会引发一个ICMP端口不可达的数据包。这向Nmap表明该机器是活动的和可用的。许多其他类型的ICMP错误,例如主机/网络不可达或TTL超过,表明主机是关闭或不可达。缺乏响应也被解释为这种情况。如果到达了打开的端口,大多数服务简单地忽略空数据包并且不返回任何响应。这就是为什么默认探测端口为40125的原因,因为这个端口极不可能被使用。一些服务,如Character Generator(chargen)协议,将对一个空UDP数据包做出响应,从而向Nmap披露该机器是活动的。

此扫描类型的主要优势在于它可以绕过仅筛选TCP的防火墙和过滤器。例如,我曾拥有一台Linksys BEFW11S4无线宽带路由器。该设备的外部接口默认情况下会筛选所有TCP端口,但UDP探测仍将引发端口不可达消息,并从而泄露该设备。

-PY (SCTP INIT Ping)
该选项发送一个包含最小INIT块的SCTP数据包。默认目标端口是80(可以通过在nmap.h中更改DEFAULT_SCTP_PROBE_PORT_SPEC来进行编译时配置)。可以指定其他端口作为参数。语法与-p相同,只是不允许使用类似S:的端口类型说明符。示例是-PY22和-PY22,80,179,5060。请注意,在-PY和端口列表之间不能有空格。如果指定了多个探测,它们将并行发送。

INIT块向远程系统表示你正在尝试建立一个关联。通常情况下,目标端口将关闭,并发送一个ABORT块作为回应。如果端口恰好打开,目标将通过响应INIT-ACK块来采取SCTP四次握手的第二步。如果运行Nmap的机器具有功能完善的SCTP堆栈,那么它会通过响应ABORT块而不是发送下一步的COOKIE-ECHO块来终止初生的关联。ABORT数据包是运行Nmap的机器的内核对意外的INIT-ACK的回应而发送的,而不是由Nmap本身发送的。

Nmap不关心端口是打开还是关闭。ABORT或INIT-ACK响应告诉Nmap主机可用且响应良好。

在Unix系统上,通常只有特权用户root才能发送和接收原始SCTP数据包。目前,非特权用户无法使用SCTP INIT Pings。

-PE;-PP;-PM(ICMP Ping类型)
除了之前讨论的不寻常的TCP、UDP和SCTP主机发现类型外,Nmap还可以发送普遍ping程序发送的标准数据包。Nmap向目标IP地址发送一个ICMP类型8(回显请求)数据包,并期望从可用主机返回类型0(回显应答)数据包。不幸的是,对于网络探测者来说,许多主机和防火墙现在会阻止这些数据包,而不是按照RFC 1122的要求作出响应。因此,在互联网上针对未知目标进行仅限于ICMP的扫描很少可靠。但对于监视内部网络的系统管理员来说,它们可能是一种实用且高效的方法。使用-PE选项启用此回显请求行为。

虽然回显请求是标准的ICMP ping查询,但Nmap并不止于此。ICMP标准(RFC 792和RFC 950)还指定了时间戳请求、信息请求和地址遮罩请求数据包,其代码分别为13、15和17。尽管这些查询的表面目的是获取诸如地址掩码和当前时间之类的信息,但它们可以很容易地用于主机发现。回复的系统是可用且可访问的。当前,Nmap不实现信息请求数据包,因为它们没有得到广泛支持。RFC 1122坚持“主机不应该实现这些消息”。时间戳和地址遮罩查询可以分别使用-PP和-PM选项发送。时间戳回复(ICMP代码14)或地址遮罩回复(代码18)表示主机是可用的。在管理员特别阻止回显请求数据包的同时忘记其他ICMP查询也可以用于相同目的时,这两个查询可能非常有价值。

-PO (IP协议Ping)
较新的主机发现选项之一是IP协议ping,它在其IP头部中设置指定的协议号并发送IP数据包。协议列表采用与之前讨论的TCP、UDP和SCTP主机发现选项中的端口列表相同的格式。如果未指定协议,则默认情况下会发送多个IP数据包,其中包括ICMP(协议1)、IGMP(协议2)和IP-in-IP(协议4)。默认协议可以通过在nmap.h中更改DEFAULT_PROTO_PROBE_PORT_SPEC进行编译时配置。请注意,对于ICMP、IGMP、TCP(协议6)、UDP(协议17)和SCTP(协议132),数据包将带有正确的协议头,而其他协议将只带有IP头部之外的数据(除非指定了–data、–data-string或–data-length选项)。

此主机发现方法寻找使用与探测相同的协议的响应,或者ICMP协议不可达消息,该消息表明目标主机上不支持给定的协议。任何一种类型的响应都表示目标主机存活。

–disable-arp-ping(无ARP或ND Ping)
即使使用-Pn或-PE等其他主机发现选项,Nmap通常也会对本地连接的以太网主机进行ARP或IPv6邻居发现(ND)探测。要禁用此隐含行为,请使用–disable-arp-ping选项。

默认情况下,通常较快,但在使用代理ARP的网络上,这个选项非常有用,其中路由器猜测性地回复所有ARP请求,使得每个目标主机都根据ARP扫描显示为已启动。

–discovery-ignore-rst
在某些情况下,防火墙可能会伪造TCP复位(RST)响应以响应对未被占用或不允许的地址的探测。由于Nmap通常将RST响应视为目标主机存在的证据,这可能导致扫描不存在的目标主机时浪费时间。使用–discovery-ignore-rst将防止Nmap在主机发现期间考虑这些响应。在这种情况下,您可能需要选择额外的主机发现选项,以确保不会错过目标。

–traceroute(跟踪到主机的路径)
跟踪操作是在扫描完成后使用扫描结果信息来确定最有可能到达目标的端口和协议。它适用于除了连接扫描(-sT)和空闲扫描(-sI)之外的所有扫描类型。所有跟踪操作都使用Nmap的动态计时模型并并行执行。

跟踪操作通过发送具有低存活时间(TTL)的数据包,试图引发扫描器和目标主机之间中间跳数的ICMP超时消息来进行。标准的跟踪实现从TTL为1开始,并递增TTL直到到达目标主机。Nmap的跟踪操作则从较高的TTL开始,并递减TTL直到达到零。这样做可以让Nmap使用聪明的缓存算法加快经过多台主机的跟踪速度。平均而言,Nmap对每个主机发送的数据包少了5-10个,具体取决于网络条件。如果只扫描单个子网(例如192.168.0.0/24),Nmap可能只需要向大多数主机发送两个数据包。

四、端口扫描基础知识

五、端口扫描技术

六、端口规范和扫描顺序

七、服务和版本检测

八、操作系统检测

九、Nmap脚本引擎 (NSE)

十、时间和性能

十一、FW/IDS规避和欺骗

十二、输出

十三、其他选项

十四、运行时交互示例

十五、Nmap手册

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值