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, 下面是通过wireshare分数据包分析截图:

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

nmap 利用客户端回SYN,ACK 的这个数据包其实就已经知道22这个端口是开放的,如果我们扫描一个没有开放的端口:
➜ sudo nmap -p80 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
80/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无法进行判断

延伸阅读
Nmap常见扫描方式流量分析的更多相关文章
- nmap 高级扫描用法
nmap提供了四项基本功能(主机发现.端口扫描.服务与版本侦测.OS侦测)及丰富的脚本库.Nmap既能应用于简单的网络信息扫描,也能用在高级.复杂.特定的环境中:例如扫描互联网上大量的主机:绕开防火墙 ...
- Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹
Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹 Nmap工具的准备工作 当用户对Nessus工具有清晰的认识后,即可使用该工具实施扫描.但是,在扫描之前需要做一些准备工作,如探测网络中活动的主 ...
- nmap参数原理抓包分析
nmap参数原理抓包分析 实验环境: Nmap7.70 实验步骤: 1.主机发现 2.端口扫描 3.服务版本探测 一.主机发现 主机发现,如果主机活跃,扫描1000个常用的tcp端口 1.Nmap i ...
- 开源流量分析系统 Apache Spot 概述(转)
原文地址http://blog.nsfocus.net/apache-spot/ Apache Spot 是一个基于网络流量和数据包分析,通过独特的机器学习方法,发现潜在安全威胁和未知网络攻击能力的开 ...
- 网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析
科来 做流量分析,同时也做了一些安全分析(偏APT)——参考其官网:http://www.colasoft.com.cn/cases-and-application/network-security- ...
- Weevely使用方法以及通信流量分析
Weevely简介 weevely项目地址:点击查看 weevely是一款针对PHP的webshell的自由软件,可用于模拟一个类似于telnet的连接shell,weevely通常用于web程序的漏 ...
- CTF流量分析题大全(掘安攻防平台)
突然想做一下流量分析题,记得掘安攻防实验室上面有很多的流量分析题目,故做之 流量分析题一般使用的都是wireshark,(流量分析工具中的王牌 夺取阿富汗 说了分析http头,所以直接过滤http协议 ...
- dns隧道攻击原理及常用工具流量分析
DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术.虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP.UDP通信大量被安全设备拦截的大背景下,DNS. ...
- Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
随机推荐
- 简单说维特比算法 - python实现
动态规划求最短路径算法,与穷举法相比优点在于大大降低了时间复杂度; 假如从起点A到终点S的最短路径Road经过点B1,那么从起点A到B1的最短路径的终点就是B1,否则如果存在一个B2使得A到B2的距离 ...
- 使用PyQtGraph绘制数据滚动图形(3)
import pyqtgraph as pg import numpy as np from pyqtgraph.Qt import QtGui, QtCore app = pg.QtGui.QApp ...
- 如何在微信小程序中使用阿里字体图标
第一步:下载需要的字体图标 进入阿里图标官网http://iconfont.cn/搜索自己想要的图标. 如这里需要一个购物车的图标,流程为: 搜索“购物车”图标 ---> 点击“添加入库” ...
- 键盘鼠标共享效率工具----Synergy
在日常工作中,为了提高工作效率以及用户体验,会一个主机接多个显示器,像程序员一般都是使用两块显示器. 然而,有很多人是和我一样,自己有多台电脑,两个笔记本.公司一个台式机,如何在台机器之间来回切换工作 ...
- php的ts和nts选择
TS(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数据 ...
- 开发小白可以一年涨薪10w?这份java文档功不可没,学透你也可以
靠这份文档,跳槽涨薪10K 金九银十的时候我分享了一份面试文档给我的兄弟,没想到这哥们2个月之内斩获数个BAT的offer, 最后选择了一个他最想要去的公司,既然有这么好的效果,我就打算把这份文档分享 ...
- statsmodels中方差分析表结果解析
引言 通常我们在对多个变量进行统计分析的时候,结果的汇总和整理需要耗费大量的时间和精力,稍有不慎还有可能出现错误.因此在对多个变量统计分析的时候,使用自动化的脚本对结果进行整理和汇总就十分的方便了. ...
- Java 源码刨析 - HashMap 底层实现原理是什么?JDK8 做了哪些优化?
[基本结构] 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的: JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的 ...
- 深入理解JVM(③)ZGC收集器
前言 ZGC是一款在JDK11中新加入的具有实验性质的低延迟垃圾收集器,目前仅支持Linux/x86-64.ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障.染色指针和内 ...
- 重学ASP.NET Core 中的标记帮助程序
标记帮助程序是什么 标记帮助程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素. 例如,内置的 ImageTagHelper 可以将版本号追加到图片名称. 每当图片发生变化时 ...