Nmap基础参数使用

        Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的网络探测和安全审核的工具。它的设计目 标是快速扫描大型网络,当然用它扫描单个主机也没有问题。Nmap以新颖的方式使用原始IP报文来发 现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),这些服务运行在什么操作系统(包括 版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审 核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务 升级计划,以及监视主机和服务的运行。 Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。 状态可能是 open (开放的), filtered (被过滤的), closed (关闭的),或者 unfiltered (未被过滤 的)。 Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。 filtered (被过滤的) 意 味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知它是 open (开放的) 还是 closed (关闭的)。 closed (关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。 当端 口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered (未被过滤的)。 如果Nmap报告状态组合 open|filtered 和 closed|filtered 时,那 说明Nmap无法确定该端口处于两个状态中的哪一个状态。 当要求进行版本探测时,端口表也可以包含 软件的版本信息。

目标说明

        除了选项,所有出现在Nmap命令行上的都被视为对目标主机的说明。 最简单的情况是指定一个目标IP 地址或主机名。

-iL (从列表中输入)

从 中读取目标说明。在命令行输入一堆主机名显得很笨拙,然而经常需要这样。 例如,您的 DHCP服务器可能导出10,000个当前租约的列表,而您希望对它们进行扫描。如果您不是使用未授 权的静态IP来定位主机,或许您想要扫描所有IP地址。 只要生成要扫描的主机的列表,用-iL 把文 件名作为选项传给Nmap。列表中的项可以是Nmap在命令行上接受的任何格式(IP地址,主机名, CIDR,IPv6,或者八位字节范围)。 每一项必须以一个或多个空格,制表符或换行符分开。 如果 您希望Nmap从标准输入而不是实际文件读取列表, 您可以用一个连字符(-)作为文件名。

-iR (随机选择目标)

对于互联网范围内的调查和研究, 您也许想随机地选择目标。 选项告诉 Nmap生成多少个IP。不 合需要的IP如特定的私有,组播或者未分配的地址自动略过。选项 0 意味着永无休止的扫描。记 住,一些网管对于未授权的扫描可能会很感冒并加以抱怨。 使用该选项的后果自负! 如果在某个雨 天的下午,您觉得实在无聊, 试试这个命令nmap -sS -PS80 -iR 0 -p 80随机地找一些网站浏览。

--exclude (排除主机/网络)

如果在您指定的扫描范围有一些主机或网络不是您的目标, 那就用该选项加上以逗号分隔的列表 排除它们。该列表用正常的Nmap语法, 因此它可以包括主机名,CIDR,八位字节范围等等。 当 您希望扫描的网络包含执行关键任务的服务器,已知的对端口扫描反应强烈的系统或者被其它人看 管的子网时,这也许有用。

--excludefile

(排除文件中的列表) 这和--exclude 选项的功能一样,只是所排除的目标是用以换行符,空格,或者制表符分隔的 提供 的,而不是在命令行上输入的。

主机发现

       任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为一列活动的或者 您感兴趣的主机。扫描每个IP的每个端口很慢,通常也没必要。 当然,什么样的主机令您感兴趣主要依 赖于扫描的目的。网管也许只对运行特定服务的主机感兴趣,而从事安全的人员则可能对一个马桶都感 兴趣,只要它有IP地址:-)。一个系统管理员也许仅仅使用Ping来定位内网上的主机,而一个外部入侵测试人员则可能绞尽脑汁用各种方法试图突破防火墙的封锁。

1. -sL (列表扫描)

列表扫描是主机发现的退化形式,它仅仅列出指定网络上的每台主机, 不发送任何报文到目标主机。 默认情况下,Nmap仍然对主机进行反向域名解析以获取它们的名字。简单的主机名能给出的有用信息 常常令人惊讶。例如, fw.chi.playboy.com是花花公子芝加哥办公室的防火墙。Nmap最后还会报告IP 地址的总数。列表扫描可以很好的确保您拥有正确的目标IP。如果主机的域名出乎您的意料,那么就值 得进一步检查以防错误地扫描其它组织的网络。既然只是打印目标主机的列表,像其它一些高级功能如 端口扫描,操作系统探测或者Ping扫描的选项就没有了。

2. -sP (Ping扫描)

该选项告诉Nmap仅进行ping扫描(主机发现),然后打印出对扫描做出响应的那些主机。 没有进一步的 测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极,常常用于和列表扫描相同的目的。它可以 得到些许目标网络的信息而不被特别注意到。 对于攻击者来说,了解多少主机正在运行比列表扫描提供 的一列IP和主机名往往更有价值。系统管理员往往也很喜欢这个选项。 它可以很方便地得出网络上有多 少机器正在运行或者监视服务器是否正常运行。常常有人称它为地毯式ping,它比ping广播地址更可 靠,因为许多主机对广播请求不响应。-sP选项在默认情况下, 发送一个ICMP回声请求和一个TCP报文 到80端口。如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当 特权用户扫描局域网上的目标机时,会发送ARP请求(-PR),除非使用了--send-ip选项。 -sP选项可以和 除-P0之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端 口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目 标网络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就 不能被探测到。

3. -P0 (无ping)

该选项完全跳过Nmap发现阶段。 通常Nmap在进行高强度的扫描时用它确定正在运行的机器。 默认 情况下,Nmap只对正在运行的主机进行高强度的探测如端口扫描,版本探测,或者操作系统探测。 用-P0禁止主机发现会使Nmap对每一个指定的目标IP地址进行所要求的扫描。所以如果在命令行指定 一个B类目标地址空间(/16), 所有 65,536 个IP地址都会被扫描。 -P0的第二个字符是数字0而不是字母 O。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而是继续执行所要求的功能, 就好像每个IP都是活动的。

4. -PS [portlist] (TCP SYN Ping) 

该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的 DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。 甚至可以指定一个以逗 号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发 地扫描。SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发 回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应一个SYN/ACK TCP报文。然后 运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接 将会建立。 RST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到的SYN/ACK感到很意 外。Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。在 UNIX机器上,通常只有特权用户 root 能否发送和接收原始的TCP报文。因此作为一个变通的方法,对 于非特权用户, Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN 报文来尝试建 立连接。如果connect()迅速返回成功或者一个ECONNREFUSED 失败,下面的TCP堆栈一定已经收到了 一个SYN/ACK或者RST,该主机将被标志位为在运行。 如果连接超时了,该主机就标志位为down掉 了。这种方法也用于IPv6 连接,因为Nmap目前还不支持原始的IPv6报文。

5. -PA [portlist] (TCP ACK Ping)

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。

6. -PU [portlist] (UDP Ping)

还有一个主机发现的选项是UDP ping,它发送一个空的(除非指定了--data-length UDP报文到给定的 端口。端口列表的格式和前面讨论过的-PS和-PA选项还是一样。 如果不指定端口,默认是31338。该默 认值可以通过在编译时改变nmap.h文件中的 DEFAULT-UDP-PROBE-PORT值进行配置。默认使用这样 一个奇怪的端口是因为对开放端口 进行这种扫描一般都不受欢迎。如果目标机器的端口是关闭的, UDP探测应该马上得到一个ICMP端口无法到达的回应报文。 这对于Nmap意味着该机器正在运行。 许 多其它类型的ICMP错误,像主机/网络无法到达或者TTL超时则表示down掉的或者不可到达的主机。 没 有回应也被这样解释。如果到达一个开放的端口,大部分服务仅仅忽略这个 空报文而不做任何回应。这 就是为什么默认探测端口是31338这样一个 极不可能被使用的端口。少数服务如chargen会响应一个空 的UDP报文, 从而向Nmap表明该机器正在运行。该扫描类型的主要优势是它可以穿越只过滤TCP的防 火墙和过滤器。 例如。我曾经有过一个Linksys BEFW11S4无线宽带路由器。默认情况下, 该设备对外 的网卡过滤所有TCP端口,但UDP探测仍然会引发一个端口不可到达 的消息,从而暴露了它自己。

7. -PE; -PP; -PM (ICMP Ping Types)

除了前面讨论的这些不常见的TCP和UDP主机发现类型, Nmap也能发送世人皆知的ping程序所发送 的报文。Nmap发送一个ICMP type 8 (回声请求)报文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应)报文。 对于网络探索者而言,不幸的是,许多主机和防火墙现在封锁这些报文,而不是按期 望的那样响应。因此,仅仅ICMP扫描对于互联网上的目标通常是不够的。 但对于系统管理员监视一个 内部网络,它们可能是实际有效的途径。 使用-PE选项打开该回声请求功能。虽然回声请求是标准的 ICMP ping查询, Nmap并不止于此。ICMP标准 (RFC 792)还规范了时间戳请求,信息请求 request,和地址掩码请求,它们的代码分别是13,15和17。 虽然这些查询的表面目的是获取信息如地址掩码和 当前时间, 它们也可以很容易地用于主机发现。 很简单,回应的系统就是在运行的系统。Nmap目前 没有实现信息请求报文, 因为它们还没有被广泛支持。RFC 1122 坚持 “主机不应该实现这些消息”。 时 间戳和地址掩码查询可以分别用-PP和-PM选项发送。 时间戳响应(ICMP代码14)或者地址掩码响应(代码 18)表示主机在运行。 当管理员特别封锁了回声请求报文而忘了其它ICMP查询可能用于相同目的时,这 两个查询可能很有价值。

8. -PR (ARP Ping)

最常见的Nmap使用场景之一是扫描一个以太局域网。 在大部分局域网上,特别是那些使用基于 RFC1918私有地址范围的网络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一 个原始IP报文如ICMP回声请求时, 操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以 太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使 得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域 网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网 上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 --send-ip。

9. -n (不用域名解析)

告诉Nmap永不对它发现的活动IP地址进行反向域名解析。 既然DNS一般比较慢,这可以让事情更快 些。

10. -R (为所有目标解析域名)

告诉Nmap 永远对目标IP地址作反向域名解析。 一般只有当发现机器正在运行时才进行这项操作。

11. --system-dns (使用系统域名解析器)

默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器来解析域名。为了提高性能, 许多请求 (一般几十个) 并发执行。如果您希望使用系统自带的解析器,就指定该选项 (通过 getnameinfo()调用一次解析一个IP)。

端口扫描

       虽然Nmap这些年来功能越来越多, 它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功 能。 nmap **这个简单的命令扫描主机上的超过 1660个TCP端口。 许多传统的端口扫描器只列出所有 端口是开放还是关闭的, Nmap的信息粒度比它们要细得多。 它把端口分成六个状态: open(开放的), closed(关闭的),filtered(被过滤的), unfiltered(未被过滤的), open|filtered(开放或者被过滤的),或 者 closed|filtered(关闭或者被过滤的)。

-sS (TCP SYN扫描)

SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。 它执行得很快,在一个没有入 侵防火墙的快速网络上,每秒钟可以扫描数千个 端口。 SYN扫描相对来说不张扬,不易被注意 到,因为它从来不完成TCP连接。 它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平 台,而可以应对任何兼容的 TCP协议栈。 它还可以明确可靠地区分open(开放的), closed(关闭 的),和filtered(被过滤的) 状态它常常被称为半开放扫描, 因为它不打开一个完全的TCP连接。它 发送一个SYN报文, 就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端口在监听 (开 放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果 收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

-sT (TCP connect()扫描)

当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描。 当用户没有权限发送原始报文或 者扫描IPv6网络时,就是这种情况。 Instead of writing raw packets as most other scan types do,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫 描类型直接发送原始报文。 这是和Web浏览器,P2P客户端以及大多数其它网络应用程序用以建 立连接一样的 高层系统调用。它是叫做Berkeley Sockets API编程接口的一部分。Nmap用 该API 获得每个连接尝试的状态信息,而不是读取响应的原始报文。当SYN扫描可用时,它通常是更好的 选择。因为Nmap对高层的 connect()调用比对原始报文控制更少, 所以前者效率较低。 该系统调 用完全连接到开放的目标端口而不是像SYN扫描进行 半开放的复位。这不仅花更长时间,需要更 多报文得到同样信息,目标机也更可能 记录下连接。IDS(入侵检测系统)可以捕获两者,但大部分 机器没有这样的警报系统。 当Nmap连接,然后不发送数据又关闭连接, 许多普通UNIX系统上的 服务会在syslog留下记录,有时候是一条加密的错误消息。 此时,有些真正可怜的服务会崩溃, 虽然这不常发生。如果管理员在日志里看到来自同一系统的 一堆连接尝试,她应该知道她的系统 被扫描了。

-sU (UDP扫描)

虽然互联网上很多流行的服务运行在TCP 协议上,UDP服务也不少。 DNS,SNMP,和DHCP (注 册的端口是53,161/162,和67/68)是最常见的三个。 因为UDP扫描一般较慢,比TCP更困难,一 些安全审核人员忽略这些端口。 这是一个错误,因为可探测的UDP服务相当普遍,攻击者当然不 会忽略整个协议。 所幸,Nmap可以帮助记录并报告UDP端口。UDP扫描用-sU选项激活。它可以 和TCP扫描如 SYN扫描 (-sS)结合使用来同时检查两种协议。UDP扫描发送空的(没有数据)UDP报头 到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响 应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包 过滤器正在封锁通信。 可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。UDP扫描 的巨大挑战是怎样使它更快速。 开放的和被过滤的端口很少响应,让Nmap超时然后再探测,以 防探测帧或者 响应丢失。关闭的端口常常是更大的问题。 它们一般发回一个ICMP端口无法到达错 误。但是不像关闭的TCP端口响应SYN或者Connect 扫描所发送的RST报文,许多主机在默认情况 下限制ICMP端口不可到达消息。 Linux和Solaris对此特别严格。例如, Linux 2.4.20内核限制一 秒钟只发送一条目标不可到达消息 (见net/ipv4/icmp。c)。Nmap探测速率限制并相应地减慢来避 免用那些目标机会丢弃的无用报文来阻塞 网络。不幸的是,Linux式的一秒钟一个报文的限制使 65,536个端口的扫描要花 18小时以上。加速UDP扫描的方法包括并发扫描更多的主机,先只对主 要端口进行快速 扫描,从防火墙后面扫描,使用--host-timeout跳过慢速的 主机。

-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)

这三种扫描类型 (甚至用下一节描述的 --scanflags 选项的更多类型) 在TCP RFC 中发掘了一个微妙 的方法来区分open(开放的)和 closed(关闭的)端口。第65页说“如果 [目标]端口状态是关闭的.... 进 入的不含RST的报文导致一个RST响应。” 接下来的一页 讨论不设置SYN,RST,或者ACK位的报文 发送到开放端口: “理论上,这不应该发生,如果您确实收到了,丢弃该报文,返回。 ”如果扫描系 统遵循该RFC,当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回, 而当端口开放时,应该没有任何响应。只要不包含SYN,RST,或者ACK, 任何其它三种(FIN, PSH,and URG)的组合都行。Nmap有三种扫描类型利用这一点:Null扫描 (-sN)不设置任何标志 位(tcp标志头是0)FIN扫描 (-sF)只设置TCP FIN标志位。Xmas扫描 (-sX)设置FIN,PSH,和URG标 志位,就像点亮圣诞树上所有的灯一样。除了探测报文的标志位不同,这三种扫描在行为上完全一 致。 如果收到一个RST报文,该端口被认为是 closed(关闭的),而没有响应则意味着 端口是 open|filtered(开放或者被过滤的)。 如果收到ICMP不可到达错误(类型 3,代号 1,2,3,9, 10,或者13),该端口就被标记为 被过滤的。这些扫描的关键优势是它们能躲过一些无状态防火墙 和报文过滤路由器。 另一个优势是这些扫描类型甚至比SYN扫描还要隐秘一些。但是别依赖它 -- 多数 现代的IDS产品可以发现它们。一个很大的不足是并非所有系统都严格遵循RFC 793。 许多系 统不管端口开放还是关闭,都响应RST。 这导致所有端口都标记为closed(关闭的)。 这样的操作系 统主要有Microsoft Windows,许多Cisco设备,BSDI,以及IBM OS/400。 但是这种扫描对多数 UNIX系统都能工作。这些扫描的另一个不足是 它们不能辨别open(开放的)端口和一些特定的 filtered(被过滤的)端口,从而返回 open|filtered(开放或者被过滤的)。

-sA (TCP ACK扫描)

这种扫描与目前为止讨论的其它扫描的不同之处在于它不能确定open(开放的)或者 open|filtered(开放或者过滤的))端口。 它用于发现防火墙规则,确定它们是有状态的还是无状态 的,哪些端口是被过滤的。ACK扫描探测报文只设置ACK标志位(除非您使用 --scanflags)。当扫描 未被过滤的系统时, open(开放的)和closed(关闭的) 端口都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的),意思是 ACK报文不能到达,但至于它们是open(开放的)或者 closed(关闭 的) 无法确定。不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者 13)的端口,标记为 filtered(被过滤的)。

端口说明和扫描顺序

除了所有前面讨论的扫描方法, Nmap提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。 默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫 描。

-p (只扫描指定的端口)

该选项指明您想扫描的端口,覆盖默认值。 单个端口和用连字符表示的端口范围(如 1-1023)都可 以。 范围的开始以及/或者结束值可以被省略, 分别导致Nmap使用1和65535。所以您可以指定 - p-从端口1扫描到65535。 如果您特别指定,也可以扫描端口0。 对于IP协议扫描(-sO),该选项指 定您希望扫描的协议号 (0-255)。当既扫描TCP端口又扫描UDP端口时,您可以通过在端口号前加 上T: 或者U:指定协议。 协议限定符一直有效您直到指定另一个。 例如,参数 -p U:53,111, 137,T:21-25,80,139,8080 将扫描UDP 端口53,111,和137,同时扫描列出的TCP端口。 注意,要既扫描 UDP又扫描TCP,您必须指定 -sU ,以及至少一个TCP扫描类型(如 -sS,-sF,或 者 -sT)。如果没有给定协议限定符, 端口号会被加到所有协议列表。

-F (快速 (有限的端口) 扫描)

在nmap的nmap-services 文件中(对于-sO,是协议文件)指定您想要扫描的端口。 这比扫描所有 65535个端口快得多。 因为该列表包含如此多的TCP端口(1200多),这和默认的TCP扫描 scan (大 约1600个端口)速度差别不是很大。如果您用--datadir选项指定您自己的 小小的nmap-services文 件 ,差别会很惊人。

-r (不要按随机顺序扫描端口)

默认情况下,Nmap按随机顺序扫描端口 (除了出于效率的考虑,常用的端口前移)。这种随机化通 常都是受欢迎的, 但您也可以指定-r来顺序端口扫描。

服务和版本探测

用下列的选项打开和控制版本探测。

-sV (版本探测)

打开版本探测。 您也可以用-A同时打开操作系统探测和版本探测。

--allports (不为版本探测排除任何端口)

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

--version-intensity (设置版本扫描强度)

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

--version-light (打开轻量级模式)

这是 --version-intensity 2的方便的别名。轻量级模式使 版本扫描快许多,但它识别服务的可能性 也略微小一点。

--version-all (尝试每个探测)

这是--version-intensity 9的别名, 保证对每个端口尝试每个探测报文。

--version-trace (跟踪版本扫描活动)

这导致Nmap打印出详细的关于正在进行的扫描的调试信息。 它是您用--packet-trace所得到的信 息的子集。

-sR (RPC扫描)

这种方法和许多端口扫描方法联合使用。 它对所有被发现开放的TCP/UDP端口执行SunRPC程序 NULL命令,来试图 确定它们是否RPC端口,如果是, 是什么程序和版本号。因此您可以有效地获 得和rpcinfo -p一样的信息, 即使目标的端口映射在防火墙后面(或者被TCP包装器保护)。Decoys 目前不能和RPC scan一起工作。 这作为版本扫描(-sV)的一部分自动打开。 由于版本探测包括它并 且全面得多,-sR很少被需要。

操作系统探测

采用下列选项启用和控制操作系统检测:

-O (启用操作系统检测)

也可以使用-A来同时启用操作系统检测和版本检测。

--osscan-limit (针对指定的目标进行操作系统检测)

如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。 采用这个选项,Nmap只对满足 这个条件的主机进行操作系统检测,这样可以 节约时间,特别在使用-P0扫描多个主机时。这个选 项仅在使用 -O或-A 进行操作系统检测时起作用。

--osscan-guess; --fuzzy (推测操作系统检测结果)

当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认 进行这种匹 配,使用上述任一个选项使得Nmap的推测更加有效。

防火墙/IDS躲避和哄骗

       类似防火墙的网络隔离使得对网络的搜索更加困难,随意的搜索变得不再简单。然而,Nmap提供了很 多特性用于理解这些复杂的网络,并且检验这些过滤器是否正常工作。此外,Nmap提供了绕过某些较 弱的防范机制的手段。检验网络安全状态最有效的方法之一是尝试哄骗网络,将自己想象成一个攻击 者,使用本节提供的技术来攻击自己的网络。如使用FTP bounce扫描、Idle扫描、分片攻击或尝试穿透 自己的代理。

-f (报文分段); --mtu (使用指定的MTU)

-f选项要求扫描时(包挺ping扫描)使用 小的IP包分段。 其思路是将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难。 必须小心使用这个选项,有些系 统在处理这些小包时存在问题,例如旧的网络嗅探器Sniffit在接收 到第一个分段时会立刻出现分段错误。该选项使用一次,Nmap在IP 头后将包分成8个字节或更 小。因此,一个20字节的TCP头会被分成3个 包,其中2个包分别有TCP头的8个字节,另1个包有 TCP头的剩下4个字 节。当然,每个包都有一个IP头。再次使用-f可使用 16字节的分段(减少分段数 量)。使用--mtu选项可 以自定义偏移的大小,使用时不需要-f,偏移量必须 是8的倍数。包过滤器 和防火墙对所有的IP分段排队,如Linux核心中的 CONFIG-IP-ALWAYS-DEFRAG配置项,分段包不 会直接使用。一些网络无法 承受这样所带来的性能冲击,会将这个配置禁止。其它禁止的原因有 分段 包会通过不同的路由进入网络。一些源系统在内核中对发送的报文进行 分段,使用iptables 连接跟踪模块的Linux就是一个例子。当使用类似Ethereal 的嗅探器时,扫描必须保证发送的报文 要分段。如果主机操作系统会产 生问题,尝试使用--send-eth选项以避开IP层而直接 发送原始的 以太网帧。

D (使用诱饵隐蔽扫描)

为使诱饵扫描起作用,需要使远程主机认为是诱饵在扫描目标网络。 IDS可能会报个某个IP的5-10个端口扫描,但并不知道哪个IP在扫描以及 哪些不是诱饵。但这种方 式可以通过路由跟踪、响应丢弃以及其它主动 机制在解决。这是一种常用的隐藏自身IP地址的有 效技术。使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,这时可使用 ME选项说明。 如果在第6个位置或 更后的位置使用ME选项,一些常用 端口扫描检测器(如Solar Designer's excellent scanlogd)就不会报告 这个真实IP。如果不使用ME选项,Nmap 将真实IP放在一个随机 的位置注意,作为诱饵的主机须在工作状态,否则会导致目标主机的SYN洪水攻击。 如果在网络 中只有一个主机在工作,那就很容易确定哪个主机在扫描。也可 使用IP地址代替主机名(被诱骗的 网络就不可能在名字服务器日志中发现)。诱饵可用在初始的ping扫描(ICMP、SYN、ACK等)阶段 或真正的端口扫描 阶段。诱饵也可以用于远程操作系统检测(-O)。在进行版 本检测或TCP连接扫描 时,诱饵无效。使用过多的诱饵没有任何价值,反而导致扫描变慢并且结果不准确。 此外,一些 ISP会过滤哄骗的报文,但很多对欺骗IP包没有任何限制。

-S (源地址哄骗)

在某些情况下,Nmap可能无法确定你的源地址(如果这样,Nmap会给出 提示)。 此时,使用-S选项并说明所需发送包的接口IP地址。这个标志的另一个用处是哄骗性的扫描,使得 目标认为是另 一个地址在进行扫描。可以想象某一个竞争对手在不断扫描某个公司! -e选项常在 这种情况下使用,也可采用-P0选项。

--source-port ; -g (源端口哄骗)

仅依赖于源端口号就信任数据流是一种常见的错误配置,这个问题非常好理解。例如一个管理员部 署了一个新的防火墙,但招来了很多用户的不满,因为 他们的应用停止工作了。可能是由于外部 的UDP DNS服务器响应无法进入网络,而导致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就可以从这些 端口发送数据。为使特定的操作系 统正常工作,Nmap必须使用不同的端口号。 DNS请求会忽略--source-port选项,这是因为 Nmap依靠系 统库来处理。大部分TCP扫描,包括SYN扫描,可以完全支持这些选项,UDP扫 描 同样如此。

--data-length (发送报文时 附加随机数据)

正常情况下,Nmap发送最少的报文,只含一个包头。因此TCP包通常是40字节,ICMP ECHO请 求只有28字节。这个选项告诉Nmap在发送的报文上附加指定数量的随机字节。操作系统检测(-O) 包不受影响, 但大部分ping和端口扫描包受影响,这会使处理变慢,但对扫描的影响较小。

--ttl (设置IP time-to-live域)

设置IPv4报文的time-to-live域为指定的值。

--randomize-hosts (对目标主机的顺序随机排列)

告诉Nmap在扫描主机前对每个组中的主机随机排列,最多可达 8096个主机。这会使得扫描针对 不同的网络监控系统来说变得不是很 明显,特别是配合值较小的时间选项时更有效。如果需要对 一个较大 的组进行随机排列,需要增大nmap.h文件中 PING-GROUP-SZ的值,并重新编译。另一 种方法是使用列表扫描 (-sL -n -oN ),产生目标IP的列表, 使用Perl脚本进行随机化,然后使用-iL 提供给Nmap。

--spoof-mac (MAC地址哄骗)

要求Nmap在发送原以太网帧时使用指定的MAC地址,这个选项隐含了 --send-eth选项,以保证 Nmap真正发送以太网包。MAC地址有几 种格式。如果简单地使用字符串“0”,Nmap选择一个完 全随机的MAC 地址。如果给定的字符品是一个16进制偶数(使用:分隔),Nmap将使用这个MAC地 址。 如果是小于12的16进制数字,Nmap会随机填充剩下的6个字节。如果参数不是0或16进 制字 符串,Nmap将通过nmap-mac-prefixes查找 厂商的名称(大小写区分),如果找到匹配,Nmap将 使用厂商的OUI(3字节前缀),然后 随机填充剩余的3个节字。正确的--spoof-mac参数有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和Cisco

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值