什么是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 可以做什么
- 主机探测
- 端口扫描
- 版本检测
- 系统检测
- 支持探测脚本的编写
Nmap 的使用场景是什么
- 通过对设备或者防火墙的探测来审计它的安全性
- 探测目标主机所开放的端口
- 通过识别新的服务器审计网络的安全性
- 探测网络上的主机
Nmap 的基本使用方法
1、nmap简单扫描
nmap默认发送一个ARP的PING数据包,来探测目标主机1-10000范围内所开放的所有端口
命令语法:
nmap <target ip address>
其中:target ip address是扫描的目标主机的ip地址
例子:nmap 10.0.0.55
2、nmap简单扫描,并对结果返回详细的描述输出
命令语法:namp -vv <target ip address>
介绍:-vv参数设置对结果的详细输出
例子:nmap -vv 10.0.0.55
3、nmap自定义扫描
命令语法:nmap -p(range) <target IP>
介绍:(range)为要扫描的端口范围,端口大小不能超过65535
例子:扫描目标主机的1-50号端口
nmap -p50-80 10.0.0.55
4、nmap 指定端口扫描
命令语法:nmap -p(port1,port2,…) <target IP>
介绍:port1,port2…为想要扫描的端口号
例子:扫描目标主机的80,443,801端口
nmap -p80,443,801 10.0.0.55
5、nmap ping 扫描
nmap可以利用类似windows/linux系统下的ping 方式进行扫描
命令语法: nmap -sP <target ip>
例子:nmap sP 10.1.112.89
6、nmap 路由跟踪
路由器追踪功能,能够帮助网络管理员了解网络通行情况,同时也是网络管理人员很好的辅助工具,通过路由器追踪可以轻松的查处从我们电脑所在地到目的地之间所经常的网络节点,并可以看到通过各个结点所花费的时间
命令语法:
nmap –traceroute <target IP>
例子:namp –traceroute 114.114.114.114(dns服务器ip)
7、nmap设置扫描一个网段下的ip
命令语法:
nmap -sP <network address> </CIDR>
介绍:CIDR为设置的子网掩码(/24,/16,/8等)
例子:nmap -sP 10.1.1.0 /24
8、nmap 操作系统类型的探测
命令语法:
nmap -0 <target IP>
例子:nmap -O 10.1.112.89
9、nmap万能开关
包含了1-10000端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测
命令语法:
nmap -A <target ip>
例子:nmap -A 10.1.112.89
10、nmap命令混合式扫描
可以做到类似参数-A所完成的功能,但又能细化我们的需求要求
命令语法:
nmap -vv -p1-100 -O <target ip>
例子:
nmap -vv -p1-100 -O 10.1.112.89
Nmap 的高阶用法
Nmap简单的扫描方式:
全面扫描:nmap -T4 -A ip
主机发现:nmap -T4 -sn ip
端口扫描:nmap -T4 ip
服务扫描:nmap -T4 -sV ip
操作系统扫描:nmap -T4 -O ip
查看本地路由与接口:
nmap –iflist
指定网口与IP地址
nmap -e eth0 targetip
Nmap也可以显式地指定发送的源端IP地址。使用-S 选项,nmap将用指定的spoofip作为源端IP来发送探测包。
另外可以使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,
这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。
nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1
定制探测包
Nmap提供–scanflags选项,用户可以对需要发送的TCP探测包的标志位进行完全的控制。
可以使用数字或符号指定TCP标志位:URG, ACK, PSH,RST, SYN,and FIN。
nmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip
Nmap扫描防火墙:
SYN扫描
SYN扫描方式探测其端口开放状态。
nmap -sS -T4 www.baidu.com
扫描全部的端口
nmap -sS -T4-p- www.baidu.com
FIN扫描:
FIN扫描方式用于识别端口是否关闭,收到RST回复说明该端口关闭,否则说明是open或filtered状态。
nmap -sF -T4 www.baidu.com
ACK扫描:
ACK扫描判断端口是否被过滤。针对ACK探测包,未被过滤的端口(无论打开、关闭)会回复RST包。
nmap -sA -T4 www.baidu.com
Window扫描:
window扫描原理与ACK类似,发送ACK包探测目标端口,对回复的RST包中的Window size进行解析。
在某些TCPIP协议栈实现中,关闭的端口在RST中会将Window size设置为0;而开放的端口将Window size设置成非0的值。
nmap -sW -p- -T4 www.baidu.com
扫描路由器:
Nmap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备
扫描思科路由器
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16
扫描路由器TFTP
大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。
使用上述命令可以探测出路由器是否开放TFTP。
nmap –sU –p69 –nvv target
扫描路由器操作系统
使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。
nmap -O -F -n 192.168.1.1
扫描互联网:
Nmap内部的设计非常强大灵活,既能扫描单个主机、小型的局域网,也可以扫描成千上万台主机从中发掘用户关注的信息。
扫描大量主机,需要对扫描时序等参数进行仔细的优化。
发现互联网上web服务器
随机地产生10万个IP地址,对其80端口进行扫描。将扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt文件。
可以使用grep命令从输出文件提取关心的细节信息。
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt
统计互联网主机基本数据:
产生随机IP地址
产生100万个随机的IP地址,并将之保存到文件中,方便后续扫描时作为参数输入。
nmap -iR 1200000 -sL -n | grep “not scanned” | awk ‘{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp
优化主机发现
nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs
完整的扫描命令
nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300
扫描Web站点:
nmap -sV -p 80 -T4 --script http*,default scanme.nmap.org
Nmap的扫描速度慢如何加速
Nmap提供了一些时间模板-T0-5,随着数字增大,扫描速度将加快。可以使用nmap -T5 -d
的形式查看时间模板的参数
名称 | T0 (Paranoid) | T1(Sneaky) | T2(Polite) | T3(Normal) | T4(Aggressive) | T5(Insane) |
---|---|---|---|---|---|---|
min-rtt-timeout | 100 | 100 | 100 | 100 | 100 | 50 |
max-rtt-timeout | 300,000 | 15,000 | 10,000 | 10,000 | 1,250 | 300 |
initial-rtt-timeout | 300,000 | 15,000 | 1,000 | 1,000 | 500 | 250 |
max-retries | 10 | 10 | 10 | 10 | 6 | 2 |
初始化扫描延迟scan-delay | 300,000 | 15,000 | 400 | 0 | 0 | 0 |
最大TCP扫描延迟 | 300,000 | 15,000 | 1,000 | 1,000 | 10 | 5 |
最大UDP扫描延迟 | 300,000 | 15,000 | 1,000 | 1,000 | 1,000 | 1,000 |
host-timeout | 0 | 0 | 0 | 0 | 0 | 900,000 |
min-parallelism | 动态 | 动态 | 动态 | 动态 | 动态 | 动态 |
max-parallelism | 1 | 1 | 1 | 动态 | 动态 | 动态 |
min-hostgroup | 动态 | 动态 | 动态 | 动态 | 动态 | 动态 |
max-hostgroup | 动态 | 动态 | 动态 | 动态 | 动态 | 动态 |
min-rate | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 |
max-rate | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 |
defeat-rst-ratelimit | 默认未启用 | 默认未启用 | 默认未启用 | 默认未启用 | 默认未启用 | 默认未启用 |
-Pn 加速
-Pn 最大的问题就是无法获取到网络状态信息,由于重传和RTT估算的问题,导致整个扫描过程等待时间过长,因此我们可以手动指定--max-rtt-timeout, --initial-rtt-timeout。
Nmap没有从每个主机上收集到足够的响应来准确估算延迟和丢包率,那么我们首先需要解决这个问题。我们可以通过命令行来手动收集该信息,可以通过ping 相邻的在线主机获取延迟估计,当然可能会有禁ping的现象,可以用nmap附赠的小工具nping 对开放的端口进行探测,获取延迟估计。
根据这个延迟,我们大致能知道到该目标范围主机的网络状况,因此我们只需要手动指定--max-rtt-timeout, --initial-rtt-timeout 为比这个延迟大一定程度的值就可以了。例如延迟为60毫秒,则我们可以将其指定为 --max-rtt-timeout 200ms --initial-rtt-timeout 150ms。