Nmap

Nmap

1. 功能

  Nmap(“ Network Mapper ”)是用于网络探索和安全审核的开源工具。尽管它可以在单个主机上正常运行,但它可以快速扫描大型网络。Nmap以新颖的方式使用原始IP数据包来确定网络上可用的主机,这些主机提供的服务(应用程序名称和版本),它们正在运行的操作系统(和OS版本),包过滤器/防火墙的类型。正在使用中,还有许多其他特性。
  尽管Nmap通常用于安全审核,但许多系统和网络管理员发现它对于日常任务(例如网络清单,管理服务升级计划以及监视主机或服务正常运行时间)很有用。
  Nmap的输出是扫描目标的列表,每个目标都有补充信息,具体取决于所使用的选项。

2. 命令格式

namp[扫描类型][选项]{目标或目标集合}

  Nmap命令行内不是选项参数的所有内容均被视为目标主机范围。

3. 参数详解

3.1 目标格式

  使用主机名作为目标时,通过DNS确定IP地址,如果解析出多个IP地址,仅扫描第一个地址。如果要扫描解析出的所有地址,使用--resolve-all
  Nmap支持CIDR样式寻址,格式为192.168.0.0/16
  更灵活的方式: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四个地址。
  Nmap接受多个主机列表,例如nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.-
  使用以下选项也可以控制目标的选择:

-iL <inputfilename>

  文件可以采用Nmap在命令行上接受的任何格式(IP地址,主机名,CIDR,IPv6或八位位组范围)。每个地址必须由一个或多个空格,制表符或换行符分隔。
  输入文件可能包含#以该行开头并延伸到该行末尾的注释。

-iR <num hosts>

  对于Internet范围的调查和其他研究,您可能希望随机选择目标。该参数告诉Nmap生成多少个IP。诸如某些专用,多播或未分配地址范围中的IP之类的不良IP将被自动跳过。
  0 可以为无休止的扫描指定该参数。如果你发现自己真的在一个下雨的下午感到无聊,请尝试使用命令 nmap -Pn -sS -p 80 -iR 0 --open 查找随机Web服务器进行浏览。

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

  指定以逗号分隔的目标列表,在扫描过程中排除掉这些地址。

--excludefile <exclude_file>

  提供了与该--exclude 选项相同的功能,排除目标以换行符,空格或制表符分隔 <exclude_file>。
  排除文件可能包含以行开头#和结尾处的注释 。

3.2 主机发现

-sL

  该选项仅列出指定网络中的每个主机,而不发送任何数据包到目标主机。Nmap会在主机上进行反向DNS解析,以了解其名称。

-sn

  Nmap使用ping扫描进行主机发现,而不会进行端口扫描。
  默认情况下,使用-sn完成的主机发现包括ICMP echo请求、到端口443的TCP SYN、到端口80的TCP ACK和ICMP时间戳请求。
  如果在运行Nmap的源主机和目标网络之间设置了严格的防火墙,建议使用高级技术。否则,当防火墙丢弃探针或其响应时,主机可能会丢失。
  在之前的版本中,-sn被叫做-sP

-Pn

  Nmap默认主机存活,直接进行端口扫描,而跳过主机发现阶段。
  在之前的版本中,-Pn被叫做-P0-PN

-PS <port list>

  发送一个空的TCP数据包,设置SYN标志。默认目标端口为80。
  语法与其他语法相同,示例为-PS22-PS22-25,80,1000需要注意的是-PS与端口号之间不能有空格。
  过程:NMAP发送TCP包到目标端口,并设置SYN标志。正常情况下,目标端口将关闭,然后发送回RST(复位)数据包。如果端口恰好是开放的,则目标将执行TCP三次握手的第二步 通过响应SYN / ACK TCP数据包。NMAP不在乎目标端口是打开或者关闭的,RST和SYN/ACK都表示目标主机可用且响应。

-PA <port list>

  TCP/ACK ping设置了TCP/ACK标志而不是SYN标志。这种ACK数据包通过已建立的TCP连接来确认数据,但是不存在这样的连接。因此,远程主机应始终以RST数据包作为响应,以公开其在进程中的存在。
  语法与-PS语法相同,默认端口为80。
  使用SYN/ACK ping两种方式可以一定程度上绕过防火墙的限制

-PU <port list>

  UDP Ping将UDP数据包发送到给定的端口。对于大多数端口,数据包将为空,尽管某些端口使用协议特定的有效负载来触发响应。击中目标计算机上的关闭端口后,UDP探测应返回ICMP端口不可达数据包。这向Nmap表示机器已启动并且可用。如果达到了开放端口,则大多数服务只会忽略空数据包,而不会返回任何响应。这就是为什么默认探针端口为40125(极不可能使用)的原因。
  端口列表与-PS-PA为相同的格式 。如果未指定任何端口,则默认值为40125。默认情况下使用高度不常见的端口,因为对于这种特定的扫描类型,通常不希望发送到打开的端口。
  这种扫描类型的主要优点是,它绕过了防火墙和仅过滤TCP的筛选器。

-PY <port list>

  SCTP INIT Ping发送包含最小INIT块的SCTP数据包,默认端口为80.

-PE;-PP;-PM

  发送ICMP回显请求、时间戳请求、地址掩码请求。

-PO

  IP协议ping是较新的主机发现选项之一,它发送IP数据包,该IP数据包在其IP标头中设置了指定的协议号。协议列表采用与前面讨论的TCP,UDP和SCTP主机发现选项中的端口列表相同的格式。如果未指定协议,则默认为发送多个IP数据包用于ICMP(协议1),IGMP(协议2)和IP-in-IP(协议4)。
  此主机发现方法使用与探针相同的协议来查找响应,或者使用ICMP协议不可达消息来表明目标主机不支持该给定协议。两种类型的响应都表明目标主机处于活动状态。

--disabled-arp-ping

  Nmap通常会对本地连接的以太网主机执行ARP或IPv6邻居发现(ND)发现,即使使用其他主机发现选项(例如-Pn或-PE)也是如此。要禁用此隐式行为,请使用该--disable-arp-ping 选项。
  默认行为通常更快,但是此选项在使用代理ARP的网络上很有用,在该网络中,路由器以推测方式答复所有ARP请求,从而根据ARP扫描使每个目标都处于启动状态。

--discovery-ignore-rst

  在某些情况下,防火墙可能会欺骗TCP重置(RST)响应,以响应对未占用或不允许的地址的探测。由于Nmap通常认为RST答复可以证明目标已启动,因此可能会浪费时间扫描不存在的目标。使用--discovery-ignore-rst将会阻止Nmap在主机发现期间考虑这些答复。您可能需要选择其他主机发现选项,以确保在这种情况下不会错过目标。

--traceroute

  使用来自扫描结果的信息在扫描后执行跟踪路由,以确定最有可能到达目标的端口和协议。它适用于除连接扫描-sT和空闲扫描-sI以外的所有扫描类型。所有迹线均使用Nmap的动态时序模型并并行执行。
  Traceroute通过发送具有低TTL(生存时间)的数据包来工作,以尝试从扫描程序和目标主机之间的中间跃点中引出ICMP超时消息。标准traceroute实施以TTL为1开始,并递增TTL,直到到达目标主机为止。Nmap的跟踪路由以较高的TTL开始,然后递减TTL直到达到零。向后执行此操作可使Nmap使用巧妙的缓存算法来加快对多个主机的跟踪。平均而言,根据网络状况,Nmap每台主机少发送5-10个数据包。如果正在扫描单个子网(即192.168.0.0/24),则Nmap可能只需要向大多数主机发送两个数据包。

-n

  告诉Nmap不要对它找到的存活IP地址执行反向DNS解析。由于DNS即使使用Nmap的内置并行存根解析程序也会很慢,所以这个选项可以减少扫描时间。

-R

  告诉Nmap始终对目标IP地址执行反向DNS解析。通常,反向DNS只对响应(联机)主机执行。

--resolve-all

  如果主机名目标解析为多个地址,请扫描所有地址。默认行为是仅扫描第一个解析的地址。无论如何,将仅扫描相应地址系列中的地址:默认为IPv4。

--system-dns

  默认情况下,Nmap反向解析IP地址的方法是直接向主机上配置的名称服务器发送查询,然后侦听响应。许多请求(通常是几十个)并行执行以提高性能。指定此选项以改用系统解析程序(通过getnameinfo调用一次一个IP)。这很慢,而且很少有用。系统解析器总是用于前向查找(从主机名获取IP地址)。

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

  默认情况下,Nmap通过resolv.conf文件(Unix)或注册表(Win32)确定DNS服务器(用于rDNS解析)。或者,您可以使用此选项来指定备用服务器。如果使用,则不支持该选项--system-dns。使用多个DNS服务器通常更快,尤其是如果您为目标IP空间选择了权威服务器时。此选项还可以提高隐身性,因为您的请求几乎可以在Internet上的任何递归DNS服务器上被退回。
  扫描专用网络时,此选项也很方便。有时只有少数名称服务器提供正确的rDNS信息,您甚至可能不知道它们在哪里。您可以在网络上扫描端口53(也许使用版本检测),然后尝试使用Nmap列表扫描-sL一次指定每个名称服务器,--dns-servers直到找到一个可用的名称服务器。
  如果DNS响应超出UDP数据包的大小,则可能不支持该选项。在这种情况下,我们的DNS解析器将尽最大努力从截断的数据包中提取响应,如果失败,它将回退到使用系统解析器。同样,包含CNAME别名的响应将回退到系统解析器。

3.3 端口扫描

-sS

  TCP SYN扫描可以快速执行,在不受限制性防火墙阻碍的快速网络上每秒扫描数千个端口。由于它从不完成TCP连接,因此它也相对不引人注意和隐秘。SYN扫描可用于任何兼容的TCP堆栈,而不必像Nmap的FIN / NULL / Xmas,Maimon和空闲扫描那样依赖于特定平台的特性。它还允许之间的明确,可靠的分化open, closed和filtered 状态。

-sT

  TCP连接扫描是默认的TCP扫描类型。系统调用将完成与打开的目标端口的连接,而不是执行SYN扫描所做的半开复位。这不仅需要更长的时间,并且需要更多的数据包才能获得相同的信息,而且目标计算机更有可能记录连接。不错的IDS可以捕获任何一个,但是大多数机器都没有这种警报系统。当Nmap连接然后在不发送数据的情况下关闭连接时,普通Unix系统上的许多服务都会在syslog中添加注释,有时还会显示一条错误的错误消息。发生这种情况时,真正可悲的服务会崩溃,尽管这种情况并不常见。从单个系统的日志中看到大量尝试连接的管理员应该知道已对她进行了连接扫描。

-sU

  UDP扫描过将UDP数据包发送到每个目标端口来工作。对于一些常见的端口,例如53和161,协议特定的有效载荷发送到增加反应速率,但对于大多数端口,除非该分组是空的--data, --data-string或者--data-length 被指定的选项。
  可以将UDP扫描与TCP扫描类型(例如SYN scan(-sS))组合使用,以在同一运行期间检查两个协议。
  加快UDP扫描速度的想法包括并行扫描更多主机,首先仅对流行端口进行快速扫描,从防火墙后面进行扫描以及--host-timeout用于跳过慢速主机。

-sY

  SCTP 是TCP和UDP协议的一个相对较新的替代方案,它结合了TCP和UDP的大多数特征,还增加了新功能,例如多宿主和多流。它主要用于与SS7 / SIGTRAN相关的服务,但也有可能用于其他应用程序。SCTP INIT扫描是相当于TCP SYN扫描的SCTP。它可以快速执行,在不受限制性防火墙阻碍的快速网络上每秒扫描数千个端口。像SYN扫描一样,INIT扫描相对不引人注目且隐秘,因为它从未完成SCTP关联。它还允许之间的明确,可靠的分化open, closed和filtered 状态。

-sN; -sF; -sX

  这三种扫描类型利用TCP RFC中的细微漏洞来区分端口open和closed端口。这三种扫描类型在行为上完全相同,只是在探测数据包中设置了TCP标志。
  空扫描(-sN):不设置任何位,TCP标志头为0。
  FIN扫描(-sF):仅设置TCP FIN位。
  Xmas扫描(-sX):设置FIN,PSH和URG位
  这些扫描类型的主要优点是它们可以穿越某些非状态防火墙和数据包筛选路由器。另一个优点是这些扫描类型甚至比SYN扫描更隐蔽。不过不要指望-大多数现代IDS产品都可以配置为检测它们。最大的缺点是,并非所有系统都遵循RFC 793。无论端口是否打开,许多系统都会向探针发送RST响应。这会导致所有端口都被标记closed。

-sA

  TCP ACk扫描不会确定端口是否为open/open|filtered状态。它用来映射防火墙规则,确定他们的状态以及过滤了哪些端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况

-sW

  TCP窗口扫描
  与TCP ACK扫描几乎相同,但是它利用某些系统的实现细节来区分开放端口和关闭端口,而不是在返回RST时就输出unfiltered。

-sM

  TCP Maimon扫描
  Maimon扫描以其发现者Uriel Maimon命名。该技术与NULL,FIN和Xmas扫描完全相同,只是探针为FIN / ACK。根据RFC 793(TCP),应响应端口打开或关闭这样的探测来生成RST数据包。

--scanflags

  自定义TCP扫描
  该--scanflags选项允许通过指定任意TCP标志来设计自己的扫描。除了指定所需的标志之外,还可以指定TCP扫描类型(例如-sA或-sF)。该基本类型告诉Nmap如何解释响应。例如,SYN扫描将无响应视为指示 filtered端口,而FIN扫描则将其视为与端口相同 open|filtered。Nmap的行为方式与基本扫描类型相同,只是它会使用您指定的TCP标志代替。如果未指定基本类型,则使用SYN扫描。

-sZ

  SCTP COOKIE ECHO扫描
  SCTP COOKIE ECHO扫描是更高级的SCTP扫描,SCTP实现应在开放端口上静默丢弃包含COOKIE ECHO块的数据包,但如果端口关闭则发送ABORT。
  优点:端口扫描不像INIT扫描那样明显,可能有非状态防火墙规则集阻止INIT块,但不会阻止COOKIE ECHO块。
  缺点:SCTP COOKIE ECHO扫描无法区分open和filtered 端口,open|filtered 在两种情况下都处于状态。

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

  空闲扫描
  攻击者可以不使用自己的IP向目标主机发送数据包,而是通过利用不活跃的僵尸主机反弹给攻击者一个边信道,从而使攻击者可以进行端口扫描。IDS会将僵尸主机(必须启动并满足特定条件)作为攻击者。除了隐蔽外,这种扫描类型允许映射机器之间基于IP的信任关系
  原理:互联网上的每个IP数据包都有一个分段身份识别号(IP ID)。许多操作系统只是简单的把该识别号递增,因此分析最后一次的IP ID就可以告诉攻击者已经发送了多少数据包。
  过程:
  1.探测僵尸主机的IP ID并记录。
  2.向需要扫描的目标主机端口发送一个伪造成来自僵尸主机的SYN包。根据目标主机端口状态的不同,目标主机返回的数据包会使得僵尸主机的IP ID递增或否。
  3.再次探测僵尸主机的IP ID。并对比第一步记录的IP ID就可以确定目标主机端口的状态。每次扫描后,僵尸主机的IP ID应该增加1或2。增加1说明僵尸主机没有发送任何数据包,只有攻击者探测时导致的加1。而未发送任何数据包 则说明目标端口是未打开的(目标主机向僵尸主机发送了RST包,该包会被忽略,或者什么也没发送)。增加2说明僵尸主机在两次探测之间发送了一个额外的数 据包。这个额外的数据包表明目标端口是开放的(即目标主机收到伪造的SYN包后向僵尸主机发送SYN/ACK包,僵尸主机向目标主机回复一个RST包)。
  如果希望探测僵尸上的特定端口的IP ID更改,则可以在僵尸主机上添加冒号和端口号。否则,Nmap将使用默认情况下用于TCP ping的端口(80)。

-s0

  IP协议扫描
  IP协议扫描使您可以确定目标计算机支持哪些IP协议(TCP,ICMP,IGMP等)。从技术上讲,这不是端口扫描,因为它循环显示IP协议号而不是TCP或UDP端口号。但是,它仍然使用该 -p选项来选择扫描的协议号,以常规端口表格式报告其结果,甚至使用与真实端口扫描方法相同的基础扫描引擎。因此,它足够接近它所属的端口扫描。

-b <FTP relay host> 

  FTP跳出扫描
  连接到FTP服务器,通过发送文件到目标主机的目标端口,并通过错误消息判断端口是否打开。这是绕过防火墙的好方法,因为组织FTP服务器通常位于比其他旧Internet主机对其他内部主机具有更多访问权限的位置。
  参数格式:<username>:<password>@ <server>:<port><Server>是易受攻击的FTP服务器的名称或IP地址。与普通URL一样,您可以省略 <username>:<password>,在这种情况下,将使用匿名登录凭据(用户: anonymouspassword -wwwuser@:)。端口号(和前面的冒号)也可以省略,在这种情况下,将使用默认的FTP端口(21)<server>

3.4 端口规则和扫描顺序

  Nmap提供用于指定要扫描哪些端口以及扫描顺序是随机的还是顺序的选项。默认情况下,Nmap为每个协议扫描最常见的1,000个端口。

-p <port ranges>

  此选项指定要扫描的端口,并覆盖默认端口。各个端口号都可以,连字符号之间的范围也可以(例如1-1023)。范围的开始和/或结束值可能会被忽略,从而导致Nmap分别使用1和65535。因此,您可以指定-p-扫描1到65535之间的端口。扫描零端口 如果明确指定,则允许使用。对于IP协议扫描(-sO),此选项指定要扫描的协议编号(0–255)。
  扫描协议的组合(例如TCP和UDP)时,可以在端口号之前加上T:TCPU:UDPS:SCTPP: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]。

--exclude-ports <port ranges> 

  此选项指定您希望Nmap从扫描中排除的端口。的 指定方式类似于-p。对于IP协议扫描(-sO),此选项指定您要排除的协议编号(0–255)。
  当要求排除端口时,会将它们从所有类型的扫描中排除(即,在任何情况下都不会进行扫描)。这也包括发现阶段。

-F 

  快速(受限端口)扫描
  指定您希望扫描的端口数少于默认端口数。通常,Nmap为每个扫描的协议扫描最常见的1,000个端口。使用-F,该值减少为100。

-r

  不要随机化端口
  默认情况下,Nmap随机化扫描的端口顺序(出于效率原因,某些通用端口会移到开头附近)。通常需要这种随机化,但是您可以指定 -r进行顺序(从最低到最高排序)端口扫描。

3.5 服务与版本检测

-sV

  版本检测
  启用版本检测,也可以使用-A选项。

--allports

  不会排除任何端口
  默认情况下,Nmap的版本检测会跳过TCP端口9100,因为一些打印机只是简单的打印发送到该端口的所有内容,从而导致数十页的HTTP GET请求、二进制SSL会话请求等。

--version-intensity <intensity>

  设置版本检测强度
  在执行版本检测-sV时,Nmap发送一系列探针,每一个探针都被分配了一个1-9之间的值,值越低的探针会对各种常见服务更有效果,值越高的探针则很少有用(rarely useful)。强度级别指定应使用的探针。数字越高,就越有可能正确识别服务。但是,高强度扫描需要更长的时间。强度必须在0到9之间,预设值为7。
  通过nmap-service-probes ports指令将探针注册到目标端口后 ,无论强度级别如何,都将尝试该探针。这样可以确保始终对任何打开的端口53尝试进行DNS探测,对443进行SSL探测等。

--version-light

  启用轻量模式,另一种实现方式为--version-intensity 2
  使用该选项会提升版本检测的速度,但是会降低识别服务的能力。

--version-all

  尝试每一个探针,另一种实现方式为--version-intensity 9
  对每一个端口尝试每一种探针。

--version-trace

  跟踪版本扫描活动
  Nmap会打印出有关正在进行的版本检测的大量调试信息。

3.6 操作系统检测

-O

  操作系统检测

--osscan-limit

  将操作系统检测限制为有希望的目标
  如果找到至少一个打开的TCP端口和一个关闭的TCP端口,则OS检测将更加有效。设置此选项,Nmap甚至不会尝试针对不符合此条件的主机进行OS检测。这样可以节省大量时间,尤其是-Pn对许多主机进行扫描时。仅在使用-O-A时才重要。

--osscan-guess/--fuzzy

  猜测操作系统检测结果
  当Nmap无法检测到完美的操作系统匹配时,它有时会提供接近匹配的可能性。默认情况下,匹配必须非常接近Nmap才能执行此操作。这些(等效)选项中的任何一个都会使Nmap猜测更具攻击性。Nmap仍然会在打印不完全匹配时告诉您,并显示每个猜测的置信水平(百分比)。

--max-os-tries

  设置针对目标的最大操作系统检测尝试次数
  当Nmap对目标执行OS检测并且找不到完美匹配时,通常会重复尝试。默认情况下,如果条件适合于操作系统指纹提交,则Nmap尝试五次,而条件不太好时,Nmap尝试两次。指定较低的--max-os-tries值(例如1)可以加快Nmap的速度,尽管您错过了重试(可能会识别操作系统)的重试机会。或者,可以设置较高的值以在条件允许时允许更多重试。除生成更好的指纹以便提交并集成到Nmap OS数据库外,很少这样做。

3.6 时间和性能

--min-hostgroup <numhosts>/--max-hostgroup <numhosts>

  调整并行扫描组的大小
  Nmap可以并行进行端口扫描或版本扫描多个主机的功能。Nmap通过将目标IP空间划分为多个组,然后一次扫描一个组来做到这一点。通常,较大的组效率更高。不利的一面是,直到整个小组结束后才能提供主办结果。因此,如果Nmap的组大小为50,则用户将不会收到任何报告(详细模式下提供的更新除外),直到前50台主机完成为止。
  默认情况下,Nmap对这种冲突采取折衷方法。它以低至5个组的大小开始,因此第一个结果很快出现,然后将组大小增加到1024个。确切的默认数字取决于给定的选项。出于效率方面的考虑,Nmap将较大的组大小用于UDP或少数端口TCP扫描。
  当使用指定最大组大小时--max-hostgroup,Nmap将永远不会超过该大小。使用指定最小大小,--min-hostgroupNmap将尝试将组大小保持在该级别之上。如果给定接口上没有足够的目标主机来满足指定的最小值,则Nmap可能必须使用比您指定的组小的组。两者都可以设置为将组大小保持在特定范围内,尽管这是很少需要的。
  这些选项在扫描的主机发现阶段不起作用。这包括普通ping扫描-sn。主机发现始终在大型主机组中起作用,以提高速度和准确性。
  这些选项的主要用途是指定较大的最小组大小,以使完整扫描更快地运行。常见选择是256以/24大小的块扫描网络。对于具有许多端口的扫描,超过该数量可能不会有太大帮助。对于仅扫描几个端口号的情况,主机组大小为2048或更大可能会有所帮助。

3.6 防火墙/IDS规避和欺骗

-f/--mtu

  碎片包/使用指定的MTU。
   -f 选项要求扫描时使用小的IP包分段。其思路是将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难。使用--mtu选项可以自定义偏移的大小,使用时不需要-f,偏移量必须是8的倍数。
  仅Nmap的原始数据包功能支持分段,其中包括TCP和UDP端口扫描(连接扫描和FTP退回扫描除外)和操作系统检测。版本检测和Nmap脚本引擎之类的功能通常不支持分段,因为它们依赖主机的TCP堆栈与目标服务进行通信。

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

  IP欺骗
  使用-D选项可以指定多个ip地址,或者使用RND随机生成几个地址,在指定的诱饵之间使用逗号进行分割,需要注意的是在进行版本检测或者TCP扫描的时候诱饵是无效的。例如nmap -D RND:11 127.0.0.1
  随机的方法容易发现,接下来将指定几个IP地址对目标实施扫描来达到更好的效果。例如nmap -D 127.0.0.1,127.0.0.2,127.0.0.253 127.0.153.1
  通过抓包的方法看到nmap正在使用我们指定的ip进行对目标主机的扫描,可以使用ME选项指定自己的真实IP。例如nmap -D 127.0.0.1,127.0.0.2,127.0.0.253,ME 127.0.153.1

-S <IP_Address>

  源地址欺骗
  通常不会收到回复数据包(它们将发送至正在欺骗的IP),因此Nmap不会生成有用的报告。

-e <interface>

  使用指定的接口
  告诉Nmap在哪个接口上发送和接收数据包。Nmap应该能够自动检测到它,如果不能的话会告诉你的。

-g <portnumber>/--source-port <portnumber>

  源端口欺骗
  可能会存在某些特殊的防火墙配置是仅仅基于源端口号信任流量。具体的场景为某些应用需要使用FTP、DNS服务器接受信息,许多管理员就采用了这种简单的方法允许从20、53端口传入的流量。
  Nmap提供了-g和 --source-port选项(它们等效)来利用这些弱点。只需提供一个端口号,Nmap将在可能的情况下从该端口发送数据包。大多数使用原始套接字的扫描操作(包括SYN和UDP扫描)都完全支持该选项。该选项对使用正常操作系统套接字的任何操作(包括DNS请求,TCPconnect 扫描,版本检测和脚本扫描。设置源端口也不适用于OS检测,因为Nmap必须使用不同的端口号才能使某些OS检测测试正常工作。

--data-length <number>

  将随机数据追加到发送的数据包中
  通常,Nmap发送仅包含标头的简约数据包。因此,其TCP数据包通常为40个字节,ICMP回显请求仅为28个。某些UDP端口和IP协议 默认情况下获取自定义有效负载。此选项告诉Nmap将给定数量的随机字节附加到它发送的大多数数据包中,而不使用任何协议特定的有效负载。--data-length 0 不用于随机或协议特定的有效负载。 操作系统检测-O数据包不受影响 因为那里的准确性要求探针一致性,但是大多数ping和portcan数据包都支持此功能。它会稍微减慢速度,但会使扫描效果不那么明显。

--random-hosts

  随机化目标主机序列
  

--spoof-mac <MAC sddress,prefix,vendor name>

  MAC地址欺骗
  使用该选项就可以进行MAC地址欺骗,冒失指定一个MAC地址会引起管理员怀疑,这时可以用字符串'0'随机分配一个MAC地址,也可以指定一个MAC地址进行欺骗。MAC地址最好是存在的,这样才能起到欺骗的效果,使用--spoof-mac选项可以用参数包括0MAC Address,Vendor Name0表示随机生成一个MAC地址,MAC Address表示用户手动指定一个MAC地址,Vendor Name表示从指定厂商生成一个MAC地址.

--badsum

  发送带有虚假TCP / UDP校验和的数据包
  要求Nmap对发送到目标主机的数据包使用无效的TCP,UDP或SCTP校验和。由于实际上所有主机IP堆栈都正确地丢弃了这些数据包,因此收到的任何响应都可能来自防火墙或IDS,它们没有费力去验证校验和。

3.7 输出格式

-oN

  标准保存
  nmap -F -oN test.txt 127.0.0.1

-oX

  XML保存
  nmap -F -oX test.xml 127.0.0.1
  具体输出效果如下:
  

-oS

  脚本方式输出
  nmap -F -oS test.txt 127.0.0.1
  具体输出效果如下:
  

-oG

  输出便于通过bash或perl处理的格式
  nmap -F -oG test.txt 127.0.0.1
  具体输出效果如下:
  

-oA

  输出所有格式
  nmap -F -oA test 127.0.0.1
  具体输出效果如下:
  

4. 输出状态

4.1 Open

  端口处于开放状态,例如:当nmap使用TCP SYN对目标主机某一范围的端口进行扫描时,我们知道 TCP SYN报文是TCP建立连接的第一步,所以,如果目标主机返回SYN+ACK的报文,我们就认为此端口开放了并且使用了TCP服务。

4.2 Closed

  端口处于关闭状态。例如:TCP SYN类型的扫描,如果返回RST类型的报文,则端口处于管理状态。这里我们值得注意的是关闭的端口也是可访问的,只是没有上层的服务在监听这个端口,而且,只是在我们扫描的这个时刻为关闭,当我们在另一个时间段进行扫描的时候,这些关闭的端口可能会处于open的状态。

4.3 Filtered

  由于报文无法到达指定的端口,nmap不能够决定端口的开放状态,这主要是由于网络或者主机安装了一些防火墙所导致的。当nmap收到icmp报文主机不可达报文(例如:type为3,code为13(communication administratively prohibit)报文)或者目标主机无应答,常常会将目标主机的状态设置为filtered。

4.4 Unfiltered

  当nmap不能确定端口是否开放的时候所打上的状态,这种状态和filtered的区别在于:unfiltered的端口能被nmap访问,但是nmap根据返回的报文无法确定端口的开放状态,而filtered的端口直接就没就没能够被nmap访问。端口被定义为Unfilterd只会发生在TCP ack扫描类型时当返回RST的报文。而端口被定义为filtered 状态的原因是是报文被防火墙设备,路由器规则,或者防火墙软件拦截,无法送达到端口,这通常表现为发送NMAP的主机收到ICMP报错报文,如:TYPE为3,code为13的报文(通信被认为的禁止 communication administratively prohibited),或者主机通过多次重复发送没有收到任何回应)。

4.5 Open|filtered

  这种状态主要是nmap无法区别端口处于open状态还是filtered状态。这种状态只会出现在open端口对报文不做回应的扫描类型中,如:udp,ip protocol ,TCP null,fin,和xmas扫描类型。

4.6 Closed|filtered

  这种状态主要出现在nmap无法区分端口处于closed还是filtered时。

5. 常用端口

  21:FTP 文件传输服务
  22:SSH 远程连接服务
  23:TELNET 终端仿真服务
  25:SMTP 简单邮件传输服务
  53:DNS 域名解析服务
  80:HTTP 超文本传输服务
  443:HTTPS 加密的超文本传输服务
  3306:MYSQL数据库端口
  5432:postgresql数据库端口
  6379:Redis数据库端口
  8080:TCP服务端默认端口
  8888:Nginx服务器的端口
  9200:Elasticsearch服务器端口
  27017:mongoDB数据库默认端口
  22122:fastdfs服务器默认端口

posted @ 2020-10-20 10:05  Snowieee  阅读(223)  评论(2编辑  收藏  举报