Nmap常见扫描方式流量分析

Nmap常见扫描方式流量分析

环境说明

扫描者:manjaro linux, IP地址:192.168.31.160

被扫描者:centos 7,IP地址:192.168.31.175

分析工具:wireshark

nmap 版本:version 7.80

TCP 知识回顾

这里对TCP的三次握手知识进行简单的回顾,方便后面理解Nmap的扫描流量

关于TCP协议相关内容看:http://networksorcery.com/enp/default.htm


「Source Port」:源端口

「Destination Port」:目的端口

「Sequence Number」:序列号。

「Acknowledgment Number」:确认号

「Control Bits」:包含一下几种(这几个字段这里要有印象,后续关于nmap的扫描都和这里会有关系):

字段含义
URG紧急指针是否有效。如果设置1,用于通知接收数据方在处理所有数据包之前处理紧急数据包
ACK确认号是否有效。用于确认主机成功接收数据包。如果「Acknowledgment Number」包含有效的确认号码,则设置ACK标志为。例如tcp三次握手的第二步,发送ACK=1和SYN=1 ,就是告知对方它已经收到初始包
PSH强制将数据压入缓冲区
RST连接重置
SYN表示建立连接
FIN表示关闭连接

下图是TCP三次握手的过程:


SYN 扫描

Nmap 的默认扫描方式就是SYN扫描,在192.168.31.160 执行如下命令进行扫描:

➜ sudo nmap -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-04 11:45 CST
Nmap scan report for 192.168.31.175
Host is up (0.00044s latency).

PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds

192.168.31.175 进行tcpdump 命令进行抓包:tcpdump -i any -w syn_scan.pcap,  下面是通过wiresharkfen分析数据包分析截图:


从获取的流量可以很容易看到,这种扫描的的方式是在三次握手的最后一步没有回复正常的ACK,而是发送了RST

nmap 利用客户端回SYN,ACK 的这个数据包其实就已经知道22这个端口是开放的,如果我们扫描一个没有开放的端口:

➜  sudo nmap -p999 192.168.31.175 
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:08 CST
Nmap scan report for 192.168.31.175
Host is up (0.00034s latency).

PORT   STATE  SERVICE
999/tcp closed http
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

同样我们看一下在192.168.31.175 上抓的数据包的情况,被扫描主机直接回复RST,ACK断开连接,namp从而知道被扫描端口是关闭的,数据包如下:

全连接扫描

nmap也可以进行全连接扫描,也就是完成完整的三次握手,当然这种扫描方式的效率是不如SYN扫描的

nmap -sT -p端口 目标主机

NULL扫描

是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位。

根据FRC 793的要求,「在端口关闭的情况」下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。

也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统,是为windows呢?还是unix/linux?

NULL的扫描命令参数:nmap -sN

➜  sudo nmap -sN -p22 192.168.31.175  
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00022s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.67 seconds
➜ sudo nmap -sN -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00042s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
➜  share scp root@192.168.31.175:/root/null.pcap ./     
root@192.168.31.175's password: 
null.pcap                             100% 5188    10.4MB/s   00:00 

分别扫描了一个开放的端口22 和未开放的端口999,下面的数据包中,可以看到,发送的第一个TCP包中「Control Bits」的所有Flags都没有设置,而开发的22端口没有收到任何回复,而关闭的端口,收到了一个RST数据包,nmap也是通过这种方式来判断端口是否开放。当然这种判断对于windows是不准确的了。

null的扫描流量特征还是非常明显的,很容易通过流量分析知道正在被进行null扫描。

FIN扫描

FIN 原理:

与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开放情况。

FIN扫描命令参数:nmap -sF

➜ sudo nmap -sF -p22 192.168.31.175       
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00014s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
➜ sudo nmap -sF -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds

对比null扫描,就可以看出来,FIN扫描是发送一个设置FIN的数据包,同样的如果是linux系统,收到这个如果没有收到RST则认为端口是开放的,收到RST则表示端口没有开发,windows依然无法判断。

XMAS-TREE扫描

扫描原理:

XMAS扫描原理和NULL扫描的类似,将TCP数据包中的URG、PSH、FIN标志位置1后发送给目标主机。在目标端口开放的情况下,目标主机将不返回任何信息

和NULL扫描正好相反,XMAS扫描会把所有的标志为都设置

XMAS-TREE扫描命令参数:nmap -sX

➜ sudo nmap -sX -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:53 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
➜ sudo nmap -sX -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:54 CST
Nmap scan report for 192.168.31.175
Host is up (0.00021s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

还是扫描开放的22端口和未开放的999端口,可以看到Xmas扫描会发送一个FIN,PSH,URG被设置的数据包,同样如果是linux系统可以根据是否收到RST包进行判断端口是否开放,windows无法进行判断

延伸阅读

  • http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html

  • http://networksorcery.com/enp/default.htm

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nmap是一个用于网络扫描和安全评估的开源工具。它可以帮助管理员评估其网络上的安全性,并找到可能存在的风险。 以下是一些常用的nmap扫描端口命令: 1. 扫描单个主机:nmap [IP地址] 这个命令将扫描指定IP地址上的所有端口。 2. 扫描整个子网:nmap [IP地址/子网掩码] 通过指定一个子网,可以扫描整个子网上的所有主机和端口。 3. 扫描多个目标:nmap [目标1 目标2 目标3 ...] 这个命令将同时扫描多个目标主机的所有端口。 4. 扫描指定端口范围:nmap -p [起始端口-结束端口] [IP地址] 通过指定起始端口和结束端口的范围,可以扫描指定范围内的所有端口。 5. 扫描最常用的端口:nmap -F [IP地址] 这个命令将只扫描常用端口,可以节省扫描时间。 6. 扫描所有端口:nmap -p- [IP地址] 这个命令将扫描目标主机上的所有端口,可能需要更长的时间。 7. 扫描UDP端口:nmap -sU [IP地址] 默认情况下,nmap扫描TCP端口,使用这个命令可以扫描UDP端口。 8. 扫描指定服务:nmap -p [端口] --servicedeps [服务名称] [IP地址] 这个命令将扫描指定服务相关的端口,如HTTP、FTP等。 9. 操作系统识别:nmap -O [IP地址] 这个命令将尝试通过分析目标主机的响应来识别其操作系统。 总之,nmap有许多命令和选项可供选择,用于满足不同的扫描需求。使用适当的命令可以帮助管理员更有效地评估网络安全。 ### 回答2: nmap是一款功能强大的网络扫描工具,可以用于检测远程主机上的开放端口和相关服务。以下是nmap常用的扫描端口命令总结: 1. 基本TCP扫描nmap -sT <目标IP> 或者 nmap --tcp <目标IP> 该命令使用TCP协议对目标IP进行全端口扫描,可以检测到已开放的TCP端口和相关服务。 2. 基本UDP扫描nmap -sU <目标IP> 或者 nmap --udp <目标IP> 该命令使用UDP协议对目标IP进行全端口扫描,可以检测到已开放的UDP端口和相关服务。 3. SYN扫描nmap -sS <目标IP> 或者 nmap --syn <目标IP> SYN扫描是最常用的扫描方式,通过发送TCP SYN包来确定目标主机上的开放端口。 4. 全连接扫描nmap -sT -sV <目标IP> 或者 nmap -sV --version-intensity 5 <目标IP> 全连接扫描通过与目标主机建立完整的TCP连接,检测开放端口,并尝试识别运行在开放端口上的服务版本。 5. 空扫描nmap -sF <目标IP> 或者 nmap --fin <目标IP> 空扫描利用TCP FIN包来扫描目标主机,用于检测开放的TCP端口。 6. Xmas扫描nmap -sX <目标IP> 或者 nmap --xmas <目标IP> Xmas扫描通过发送TCP FIN、PSH、URG等标志位组合的包来检测目标主机上的开放端口。 7. Null扫描nmap -sN <目标IP> 或者 nmap --null <目标IP> Null扫描是通过发送没有任何标志位的TCP包来扫描目标主机,用于检测开放的TCP端口。 8. IDLE扫描nmap -sI <代理主机> <目标IP> 或者 nmap --scan-delay <延迟时间> --scan-flags <标志位> <目标IP> IDLE扫描是通过利用第三方代理主机进行扫描,使扫描流量看起来像是来自代理主机而不是扫描主机。 以上是nmap常用的扫描端口命令。通过这些命令,我们可以灵活地进行端口扫描,提高网络安全性,以及了解目标主机的网络服务配置情况。 ### 回答3: nmap是一个功能强大的开源网络扫描工具,用于扫描和检测目标主机上的开放端口和服务。下面是一些常用的nmap扫描端口命令: 1. 基本扫描命令: nmap -p <端口号> <目标主机>:扫描指定端口号在目标主机上的开放情况。 nmap -p- <目标主机>:扫描目标主机上所有的65535个端口。 nmap -F <目标主机>:快速扫描目标主机上常用的100个端口。 2. 扫描指定范围的端口: nmap -p <起始端口>-<结束端口> <目标主机>:扫描指定范围内的端口。 3. 扫描主机发现: nmap -sn <目标网络>:对目标网络进行扫描,检测存活主机。 4. 操作系统检测: nmap -O <目标主机>:根据目标主机的网络响应特征进行操作系统的猜测。 5. 服务和版本检测: nmap -sV <目标主机>:检测目标主机上运行的服务和其版本信息。 6. 整个子网扫描nmap <目标子网>:对整个子网中的主机进行扫描。 7. 隐蔽扫描技术: nmap -sS <目标主机>:使用TCP SYN扫描技术,来隐藏自己的扫描活动。 8. UDP端口扫描nmap -sU <目标主机>:扫描目标主机上的UDP端口。 9. 脚本扫描nmap --script <脚本名> <目标主机>:执行自定义的脚本进行端口扫描和服务识别。 10. 输出结果保存: nmap -oN <结果文件名> <目标主机>:将扫描结果保存在指定文件中。 这些是一些常见nmap扫描端口命令,可以根据需要进行组合和调整,来满足不同的扫描需求。请注意,在进行任何扫描活动时,请遵守法律规定并获得相应的授权。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值