数据包分析基础
数据包分析
数据包嗅探或协议分析:指捕获和解析网络上在线传输数据的过程,为了能更好的了解网络上正在发生的事情。
目的
软件:Tcpdump、Omnipeek、Wireshark
监听网络线路
集线器嗅探方式
流经集线器的所有网络数据包都会被发送到每一个集线器连接的端口。
交换机嗅探方式
端口镜像、集线器输出、使用网络分流器、ARP欺骗方式等四种方式
- 端口镜像
设置连接的交换机的端口镜像功能,将交换机其他一个或多个端口的经过的数据包复制一份到嗅探器连接的端口上。
- 集线器输出
目标设备和交换机间插接一个集线器,嗅探器也接在集线器上;在交换机不支持端口镜像的时候可以使用这个方法,这个类似于,将两者之间的数据包“共享”给集线器上其他的端口。
- 网络分流器
有聚合的和非聚合的两种类型,都是安置在两个设备间来嗅探所有流经的网络通信,聚合的是三个接口,非聚合的是四个端口。
- ARP欺骗
通过发送包含虚假MAC地址的ARP欺骗信息,劫持其他计算机流量的过程;它是在交换式的网络中进行高级技术。
使用Cain&Abel 软件进行ARP进行欺骗
当ARP劫持开始后,即可通过Wireshark软件进行抓包分析。
路由器嗅探方式
在处理涉及多个网段与路由器问题的同时,需要将嗅探器移动到不同位置上;由此才可以获得一个完整的网络拓扑。
Wireshark 软件使用
查找:Ctrl+F
Ctrl+F:查找(过滤)
搜索类型 | 例子 |
---|---|
Display filter (表达式筛选) | Not ipip.addr=xxx.xxx.xxx.xxxArp |
Hex Value (十六进制值筛选) | 00:ffFf:ff00:a1:b2:f0 |
String (字符串筛选) | WorkstationlUserBDomain |
标记:Ctrl+M 或 右击菜单
标记了之后,数据包的显示会加深。
时间显示格式
相对时间:Ctrl+T
捕获选项:Ctrl+K
名字解析:
类型:
- MAC地址解析:MAC地址转为IP地址
- 网络层名字解析:IP转为DNS名称(网址)
- 传输层名字解析:将端口转为协议
- 使用外部网络名称解析器
弊端:
解析可能失败;打开文件都要重新解析一遍;解析DNS名字会产生额外流量;解析过程占用系统资源。
协议解析:
过滤器
- 过滤器BPF语法:
BPF限定词 | 说明 | 例子 |
---|---|---|
Type | 名字或数字代表的意义 | Host,net,port |
Dir | 指明数据来源和目的 | src,dst |
Proto | 限定使用的协议 | Ether,ip,tcp,udp,http,ftp |
逻辑运算符: 与 && 或 || 非 !
表达式 | 说明 |
---|---|
src 192.168.1.11 && port 80 | 捕获源地址是192.168.1.11 和源端口或目标端口是80的流量 |
Host xxx.xxx.xxx.xxx | 捕获某个IP地址的计算机流量 |
Host testserver2 | 捕获某个主机名的计算机流量 |
Ether host xxx.xx.xx.xx | 捕获某个MAC地址的计算机流量 |
Src host xx.xxx.xxx.x | 捕获来自某个计算机的流量 |
Dst host xx.x.x.x | 捕获前往某个计算机的流量 |
Port xxxx | 捕获指定端口的流量 |
!port xxx | 捕获除指定端口以外的所有流量 |
Icmp[0] == 3 | 捕获偏移量为0值为3(目标不可达)的Icmp数据包流量 |
Icmp[0] == 8 or icmp[0] == 0 | 捕捉代表 echo 请求 或 echo恢复的ICMP数据包流量 |
Icmp[0:2] == 0x0301 | 捕捉以类型 3 代码 1表示的目标不可达、主机不可达的ICMP数据包流量 |
Tcp[13] & 1==1 | 捕捉设置了FIN位的TCP数据包 |
Tcp[13] & 2==2 | 捕捉设置了SYN位的TCP数据包 |
Tcp[13] & 4==4 | 捕捉设置了RST位的TCP数据包 |
Tcp[13] & 8==8 | 捕捉设置了PSH位的TCP数据包 |
Tcp[13] & 16==16 | 捕捉设置了ACK位的TCP数据包 |
Tcp[13] & 32==32 | 捕捉设置了URG位的TCP数据包 |
Tcp[13] == 18 | 捕捉TCP SYN-ACK数据包 |
Ether host 00:00:00:00:00 | 捕捉流入或流出mac地址的流量 |
!Ether host 00:00:00:00:00 | 捕捉流入或流出mac地址以外的所有的流量 |
Broadcast | 捕捉广播流量 |
Udp | 捕获UDP流量 |
- 显示过滤器
使用自带的过滤表达式来过滤显示数据:
- 比较操作符
- 逻辑操作符
- 过滤器举例
过滤器表达式 | 说明 |
---|---|
! tcp.port == 3389 | 排除RDP流量 |
Tcp.flags.syn == 1 | 具有SYN标志位的TCP数据包 |
Tcp.flags.rst == 1 | 具有RST标志位的TCP数据包 |
! arp | 排除ARP流量 |
http | 所有HTTP流量 |
Tcp.port == 23 || tcp.port ==21 | 文本管理流量 |
Smtp || pop || imap | 文本email流量 |
Ip.addr == xxx.xx.xx.xx | 指定IP的流量 |
Frame.len <= xxx | 长度小于xxx字节的数据包 |
流量分析和图形化功能
网络端点
统计每个端点的地址、发送或收到的数据包的数量和字节数
每一个IP就是一个网络端点
网络会话
统计A和B端点间会话的发送或收到的数据包的数量和字节数
协议分层
可以查看各种协议的分布统计情况
数据包长度分析
跟踪TCP数据流
ps:【Wireshark软件无法实现tcp码流跟踪】
图形展示
- 查看 IO 图
通过x轴(数据包间隔时间)、Y轴(数据包数量上限)来调整显示的IO图形,通过图像过滤器可以将不同的流量以不同的颜色显示IO图像对比。
- 双向时间图
基于两个端口间TCP连接对话,确认数据包已被成功接收所需的时间,可与会话统计配合使用。
- 数据流图
对于连接可视化以及将一段时间中的数据流显示出来,配合对话统计使用,可以查看两端点之间的数据流。
【统计—FlowGraph…】
数据包标记
- 警告信息【不正常通信中的异常数据包】
- 丢失:上一段数据包丢失时
- 延收:已确认丢失的数据包,又收到其他ACK包时
- 保活:当一个连接的保活数据包出现时
- 零窗:接收方达到窗口大小,发出一个零窗口通知时
- 乱序:当数据包被乱序接收时
- 重传:一次重传会在收到一个重复ACK的20ms内进行
- 注意信息【正常通信中的异常数据包】
- 重传:收到重复的ACK或重传计时器超时
- 重复ACK:当主机没有收到下一个期望序列号的数据包是,会发生数据重复的ACK
- ACK【】
- 零窗探查:零窗口通知包发出后,用来监视TCP接收窗口的状态
- 保活ACK:用来响应保活数据包
- 零窗ACK:用来响应零窗口探查数据包
- 窗口已满:通知传输主机其接收者的TCP接收已满
- 对话信息【通信的基本信息】
- 窗口更新:接收者发出,通知发送者TCP接收窗口大小被改变
数据包分析
通用底层网络协议
地址解析协议ARP
ARP头
偏移位 | 0~7 | 8~15 |
---|---|---|
0 | 硬件类型 | ~ |
16 | 协议类型 | ~ |
32 | 硬件地址长度 | 协议地址长度 |
48 | 操作 | ~ |
64 | 发送方的MAC1 | ~ |
80 | 发送方的MAC2 | ~ |
96 | 发送方的MAC3 | ~ |
112 | 发送方的协议地址1 | ~ |
144 | 目标的MAC1 | ~ |
160 | 目标的MAC2 | ~ |
176 | 目标的MAC3 | ~ |
192 | 目标的协议地址1 | ~ |
208 | 目标的协议地址2 | ~ |
数据包分析
上述的均为:request(请求包),下图为(reply)响应包
无偿的ARP
当IP地址发生改变后,网络主机中缓存的IP和MAC映射就失效了,为了防止通信错误,无偿ARP请求被发送到网络中,强制所有收到它的设备更新ARP映射缓存。
IP协议
IP头
- 服务类型[级别]:优先级标志位和服务类型标志位,用来进行QoS
- 标识符:识别一耳光数据包或被分片数据包的次序;唯一
- 标记符:标记数据包是否为一组分片数据包的一部分
- 分片偏移:该数据包是个分片,数据包按分片偏移值顺序重组
- 生存时间:TTL —— 超时TTL时间,数据包被丢弃
数据包分析
IP分片
将一个数据流分为更小的片段,是IP用于解决跨越不同类型网络时可靠传输的一个特性。基于数据链路层所使用的最大传输单元MTU的大小,默认是1500字节(不包含14字节的以太网头本身),当数据包大小大于MTU时会被分片。
传输控制协议TCP
TCP头
- 序号:表示一个TCP片段。
- 确认序号:希望从另一个设备得到的下一个数据包序号
- 紧急指针:如果设置了URG位,紧急指针将告诉CPU从数据包的哪里开始读取数据
TCP端口
1~1023:标准端口组;特定服务会用到标准端口
1024~65535:临时端口组;操作系统会随机地选择一个端口让某个通信单独使用
下面为TCP建立连接时的三次握手包的数据包
TCP标志
TCP的三次握手
- A发送SYN,请求建立连接
- B发送SYN、ACK
- A发送ACK
【通俗介绍】:
A向B发送建立连接的邀请,B收到A的SYN之后,向A发送收到的SYN并发送自己的ACK,表示自己收到了,并且发送ACK同意A和B建立连接;A收到ACK之后,就和B建立了连接。
设置TCP数据包序列号的显示方式:
TCP的四次断开
TCP重置
- 当TCP连接中途突然掉线,使用RST标志位之处连接被异常终止或拒绝连接请求
用户数据包协议UDP
UDP头
数据包分析
互联网控制消息协议ICMP
ICMP头
ICMP类型和代码
Type | Name | Info |
---|---|---|
0 | Echo Reply | Echo 回复 |
1 | Unassigned | 未赋值 |
2 | Unassigned | 未赋值 |
3 | Destination Unreachable | 目标不可达 |
4 | Source Quench (Deprecated) | 报源抑制(弃用) |
5 | Redirect | 重定向 |
6 | Alternate Host Address | 修改主机地址 |
7 | Unassigned | 未赋值 |
8 | Echo REauest | Echo请求 |
9 | Router Advertisement | 路由器公告 |
10 | Router Solicitation | 路由器请求 |
11 | Time Exceeded | 超时 |
12 | Parameter Problem | 参数问题 |
13 | Timeestamp | 时间戳 |
14 | Timestamp Reply | 时间戳应答 |
……………………
Echo请求和响应【ping xx.xx.xx.xx】
路由跟踪【tracert x.x.x.x】
路由跟踪将TTL自加1的过程一直持续到路由到达目的IP,与路径上的每一个路由进行通信并echo返回一个响应包。