Nmap参数--探索网络
Nmap参数--探索网络
Nmap端口状态
- Open: Open状态说明Nmap确定该端口是开放的
- Close: Close状态通常可以表明该端口是关闭的,但也有可能是防火墙识别了非法扫描而特地返回一个Close信号。但概率比较小。如果单纯的过滤并不会出现这个状态。
- Filtered: Filtered状态一般来说是被防火墙屏蔽了,所以Nmap无法判断该端口是否开放。但是同样有可能是类似网络拥堵,所以可以尝试换个时段再试。
- Unfiltered: 当使用ACK扫描时会出现的状态,也就是说这个端口并没有被防火墙过滤,即该端口可以访问,但是并不能确定该端口是否开放,涉及到的TCP知识在这不展开,有兴趣可以自己Google一下。
- Open|Filtered: 该端口是开放的,但是的确被防火墙过滤了。若出现这种状态,可以试着换一种扫描方式。
- Closed|Filtered: 无法确定端口是被过滤了还是端口是关闭的。出现在IPID Idle扫描
扫描速度设置
顾名思义,指定扫描的速度来达到某些目的.
指令:
- nmap T0 [target] 非常慢的扫描,用于IDS(入侵检测系统)逃避
- nmap T1 [target] 缓慢的扫描,介于0和2之间的速度,同样可以躲开某些IDS
- nmap T2 [target] 降低扫描速度,通常不用
- nmap T3 [target] 默认扫描速度
- nmap T4 [target] 快速扫描,可能会淹没目标,如果有防火墙很可能会触发
- nmap T5 [target] 极速扫描,牺牲了准确度来换取速度.
常用扫描
指令:
- nmap -p [port]|(1-9999) [target] 指定端口号(或端口号范围)扫描
- nmap -F [target] 快速扫描默认端口,默认端口存在nmap-services中
- nmap -r 顺序扫描(默认下nmap随机扫描端口号)
- nmap --top-ports (n) 扫描出现概率最高的前n个端口
TCP SYN扫描
这个扫描方式很常用,它又被成为半开放扫描,速度非常快,同时不容易被防火墙所发现。因为它并不会进行TCP连接,而是发送一个SYN TCP请求,如果收到RST说明无法连接,如果收到了SYN/ACK说明主机存活,此时nmap不会尝试完成完整的三次握手,而是直接发送RST中断连接。
指令: nmap -sS [target]
TCP ACK扫描
和TCP SYN类似,发送一个ACK TCP请求,但是无法判断端口是否开放,因为无论开放与否主机都会回复一个RST响应。但是如果不响应或者响应ICMP错误的端口则被认为是Filtered。
指令: nmap -sA [target]
TCP连接扫描
最基础稳定的扫描方式,尝试TCP连接并且完成三次握手。与上面的SYN扫描相比速度会慢一点,并且有可能被防火墙或者系统日志记录下来。
指令: nmap -sT [target]
自定义TCP扫描
可以通过指定开启TCP某些标志位来完成自定义的TCP扫描。挖个坑,等我看完TCP/IP回来填。
指令: nmap --scanflags [Symbols] [target]
其中符号可以是URG,ACK,PSH,RST,SYN,FIN的开头字母组合,顺序无关
UDP 扫描
尝试发送空的UDP报文,如果返回ICMP目标不可达则认为该端口关闭,如果无响应则认定是被过滤,响应了则判断目标端口是开放状态。因为UDP扫描会很慢,所以通常通过-p选项来指定端口。
指令: nmap -sU -p [port list] [target]
隐蔽扫描
指令:
- nmap -sN [target] Null扫描,发送非常规的TCP数据包,如果端口关闭则会响应RST,如果开放则不响应信息
- nmap -sF [target] FIN扫描,与SYN扫描类似,将SYN替换为FIN
- nmap -sX [target] 打开数据包的FIN,PSH和URG标志位,根据RFC793规定如果端口开放则响应RST标志包。如果系统不遵守RFC793那么无论开放或者关闭都会响应RST。
空闲扫描
空闲扫描是一个非常有意思的扫描方式,它可以有效的防止你被IDS记录。下面就展开来说明一下,最后给出一个参考的链接。
先说理论基础:
- 判断一个TCP端口是否开放其中一种方法就是向该端口发送一个TCP SYN数据包,若端口开放,则会返回一个SYN/ACK包,否则将会返回一个RST包。
- 主机收到SYN/ACK后会返回一个RST包,收到的RST会被忽略
- 互联网上每个IP数据包都有一个分段身份识别号(IP ID),许多操作系统只是简单的将识别号递增,所以分析最后一次IP ID 就可以发现僵尸主机已经发送了多少数据包。
执行过程:
- 首先向僵尸主机发送探测包来记录IP ID
- 向需要扫描的主机发送一个伪造成僵尸主机IP的SYN包,此时被扫描的主机会向僵尸主机返回信息,若端口开放则会返回一个SYN/ACK,端口关闭会返回RST。
- 再次探测僵尸主机的IP ID,如果增加数等于2那么说明僵尸主机和目标主机之间发生了通信,此时即可推断出该端口是开放的。如果等于1说明该端口是关闭的,因为只有我们的探测和僵尸主机发生了通信,如果大于2说明在该端口处还存在着其他通信。
这样做的好处是可以利用IP之间的信任关系来进行探测,譬如数据库服务只对指定IP发出响应,那么此时我们就可以利用空闲扫描来完成端口的探测。
指令: nmap -sI [zombie ip] [target ip]
IP协议扫描
这并不是一个端口扫描方式,严格来讲。因为它并不扫描TCP,UDP端口。而是扫描IP协议号。从而确定对方主机是支持哪些IP协议的。
指令: nmap -sO [target]