Nmap的详细使用
介绍
常用参数选项
主机发现
端口扫描
服务和版本探测
操作系统探测
性能优化
防火墙/IDS 躲避和哄骗
输出
(一)介绍
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 无法确定该端口处于两个状态中的哪一个状态。 当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行 IP 协议扫描时 (-sO),Nmap 提供关于所支持的IP 协议而不是正在监听的端口的信息。除了所感兴趣的端口表,Nmap 还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC 地址。
参数选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
|
(3)主机发现
1.指定目标的格式
指定单个目标
1 |
|
指定多个目标(使用逗号分隔)
1 |
|
指定扫描范围
1 2 3 4 5 |
|
从列表中输入(-iL <inputfilename> )
只要生成要扫描的主机的列表,用-iL 把文件名作为选项传给Nmap。列表中的项可以是Nmap 在 命令行上接受的任何格式(IP 地址,主机名,CIDR,IPv6,或者八位字节范围)。 每一项必须以一个或多个空格,制表符或换行符分开。 如果您希望Nmap 从标准输入而不是实际文件读取列表, 您可以用一个连字符(-)作为文件名
1 2 3 |
|
随机选择目标(-iR <hostnum> )
对于互联网范围内的调查和研究 您也许想随机地选择目标
1 2 3 |
|
注意:选项0意味永无休止的扫描
排除主机/网络(--exclude <host1[,host2][,host3],...>)
如果在您指定的扫描范围有一些主机或网络不是您的目标, 那就用该选项加上以逗号分隔的列表排除它们。该列表用正常的Nmap 语法, 因此它可以包括主机名,CIDR,八位字节范围等等。 当您希望扫描的网络包含执行关键任务的服务器,已知的对端口扫描反应强烈的 系统或者被其它人看管的子网时,这也许有用。
1 2 3 |
|
排除文件中的列表(--excludefile <excludefile> )
这和--exclude 选项的功能一样,只是所排除的目标是用以 换行符,空格,或者制表符分隔的 <excludefile>提供的,而不是在命令行上输入的。
1 2 3 |
|
2.主机发现
列表扫描 -sL
1 |
|
Ping 扫描 -sP
1 2 3 4 |
|
无ping扫描 -P0
1 |
|
TCP SYN Ping -PS [portlist]
1 2 3 4 5 |
|
TCP ACK Ping -PA [portlist]
1 2 3 4 5 |
|
UDP Ping -PU [portlist]
1 2 3 4 |
|
ARP Ping -PR
1 2 3 |
|
不用域名解析 -n
1 |
|
为所有目标解析域名 -R
1 |
|
使用系统域名解析器 --system_dns
1 |
|
(四)端口扫描
Nmap把端口分成六个状态: open(开放的), closed(关闭的),filtered(被过滤的),unfiltered(未被过滤的), open|filtered(开放或者被过滤的),或者 closed|filtered(关闭或者未被过滤的)。
1.Nmap 所识别的6个端口状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
2.扫描技术
TCP SYN 扫描 -sS (匿名扫描,默认不加类型,需要root权限,扫描速度快)
TCP connect()扫描 -sT (TCP全连接扫描,不需要root权限,TCP扫描的默认模式,端口状态和SYN相同,耗时长)
UDP 扫描 -sU
注意:UDP 扫描用-sU 选项激活。它可以和TCP 扫描如 SYN 扫描 (-sS)结合使用来同时检查两种协议。
IP 协议扫描 -sO
IP 协议扫描可以让您确定目标机支持哪些IP 协议 (TCP,ICMP,IGMP,等等),从技术上说,这不是端口扫描,既然它遍历的是IP 协议号而不是TCP 或者 UDP 端口号。
3.端口说明和扫描顺序
除了所有前面讨论的扫描方法, Nmap 提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。 默认情况下,Nmap 用指定的协议对端口1到1024以及 nmap-services 文件中列出的更高的端口在扫描。
只扫描指定的端口 -p <port ranges>
1 2 3 |
|
快速 (有限的端口) 扫描 -F
1 |
|
不要按随机顺序扫描端口 -r
1 |
|
(5)服务和版本探测
版本探测 -sV
1 |
|
不为版本探测排除任何端口 --allports
1 |
|
设置 版本扫描强度 --version-intensity <intensity>
1 |
|
打开轻量级模式 --version-light
1 |
|
尝试每个探测 --version-all
1 |
|
--version-trace 跟踪版本扫描活动
1 |
|
RPC 扫描 -sR
1 2 |
|
(六)操作系统探测
启用操作系统检测 -O
1 |
|
针对指定的目标进行操作系统检测 --osscan-limit
1 |
|
推测操作系统检测结果 --osscan-guess; --fuzzy
1 |
|
(七)优化性能
调整并行扫描组的大小 --min-hostgroup <milliseconds>; --max-hostgroup <milliseconds>
1 |
|
默认方式下,Nmap 采取折衷的方法。开始扫描时的组较小,最小为5,这样便于尽快产生结果;随后增长组的大小,最大为1024。确切的大小依赖于所给定的选项。为保证效率,针对 UDP 或少量端口的TCP 扫描,Nmap 使用大的组。
--max-hostgroup 选项用于说明使用最大的组,Nmap 不会超出这个大小。--min-hostgroup 选项说明最小的组,Nmap 会保持组大于这个值。如果在指定的接口上没有足够的目标主机来满足所指定的最小值,Nmap 可能会采用比所指定的值小的组。这两个参数虽然很少使用, 但都用于保持组的大小在一个指定的范围之内。
这些选项的主要用途是说明一个最小组的大小,使得整个扫描更加快速。通常选择256来扫描 C 类网段。对于端口数较多的扫描,超出该值没有意义。对于端口数较少的扫描, 2048 或更大的组大小是有帮助的。
1 |
|
调整探测报文的并行度 --min-parallelism <milliseconds>; --max-parallelism <milliseconds>
1 2 3 4 5 |
|
调整探测报文超时 --min_rtt_timeout <milliseconds> , --max-rtt-timeout <milliseconds> , --initial-rtt-timeout <milliseconds>
1 2 3 4 5 6 7 8 9 |
|
放弃低速目标主机 --host-timeout <milliseconds>
1 2 |
|
调整探测报文的时间间隔 --scan-delay <milliseconds>; --max_scan-delay <milliseconds>
1 |
|
--scan-delay 的另一个用途是躲闭基于阈值的入侵检测和预防系统(IDS/IPS)。
设置时间模板 -T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
(八)防火墙/IDS 躲避和哄骗
报文分段 -f
1 |
|
使用指定的MTU --mtu
1 |
|
使用诱饵隐蔽扫描 -D <decoy1 [,decoy2][,ME],...>
1 2 3 4 5 6 7 8 9 10 |
|
源地址哄骗 -S <IP_Address>
1 2 3 |
|
使用指定的接口 -e <interface>
1 |
|
源端口哄骗 --source-port <portnumber>; -g <portnumber>
1 |
|
发送报文时 附加随机数据 --data-length <number>
1 2 |
|
设置IP time-to-live 域 --ttl <value>
1 |
|
对目标主机的顺序随机排列 --randomize-hosts
1 |
|
MAC 地址哄骗 --spoof-mac <mac address,prefix,or vendor name>
1 |
|
(九)输出
Nmap 输出格式
-oN <filespec> (标准输出)
1 |
|
-oX <filespec> (XML 输出)
1 |
|
-oS <filespec> (ScRipT KIdd|3 oUTpuT)
1 |
|
-oG <filespec> (Grep 输出)
1 2 3 4 5 6 |
|
-oA <basename> (输出至所有格式)
1 2 |
|