大家觉得有用记得关注和点赞,谢谢。
一、Wireshark介绍
Wireshark(前身是Ethereal)是一个网络封包分析软件,目前是全球使用最广泛的开源抓包软件,别名小鲨鱼或者鲨鱼鳍。
网络封包分析软件的功能是截取网卡进出的网络封包,并尽可能显示出最为详细的网络封包资料,它能够检测并解析各种协议,包括以太网、WIFI、TCP/IP和HTTP协议等等。
Wireshark使用LibPCAP、WinPCAP(现在普遍使用的是Npcap)作为驱动程序,他们提供了通用的抓包接口,直接与网卡进行数据报文交换,WinPCAP本身就是抓包分析工具,Wireshark通过对他进行整合加工丰富出来的产物,所以安装Wireshark的时候会提示我们安装WinPCAP。
二、结构介绍
1、数据包列表
NO:包的编号,通常按照顺序排列
Time: 数据包进出的当时时间
Source: 源ip地址
Destination: 目标ip地址
Protocol:协议
Length:数据包长度
Info: 数据包的一个简要描述,不能看到具体数据
对列可以进行增加、修改、删除、隐藏等操作,但是默认的这几列就够用
2、数据包的各层协议的详细数据
3、数据包对应的16进制表示和ascii类型数据显示
选中任何一行,双击,弹出如下如图
4、数据结构包的详细解析
解释IP数据报的首部
4.1、数据链路层
内容 | 说明 | 备注 |
Ethernet II | 以太网协议版本 II | |
Source: Apple_de:1f:24 | 厂名:序号 | |
(64:c7:53: de:1f:24) | 网卡地址 | |
Type: IPv4 (0x0800) | 协议类型 |
4.2、网络层
内容 | 说明 | 备注 |
Src: 10.22.35.213, | 源地址 | |
Dst: 220.181.38.251 | 目的地址 | |
Version: 4 | 互联网协议版本 | |
… 0101 = Header Length: 20 bytes (5) | 帧头部长度 | |
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) | 差分服务字段(服务类型) | |
Total Length: 84 | 帧的总长度 | |
Identification: 0x4117 (16663) | 标识字段 | |
Flags: 0x00 | 标识字段 | |
Don’t Fragment Not set | 0允许分片,1为不允许分片 | 大于MTU制之后就丢弃报文 |
More Fragments set | 大于MTU值 1代表后面还有分片包 0代表最后一个分片包 小于等于MTU值 0代表后面还有分片包 0代表最后一个分片包 | |
Fragment Offset 0 | 分片偏移量 | 第一片为0,第二片开始有偏移量,通常与More Fragments set组合使用 |
Total Length | 数据长度 | |
Seq | 序列号 | 用来定位丢包,通常序列号顺序连续 |
Identification | 同一个包的不同分片的标识 | |
Fragment Offset: 0 | 分段偏移量 | |
Time to Live: 64 | 生存期 ITL | |
Protocol: ICMP (1) | 上层协议 | |
Header Checksum: 0x9383 [validation disabled] | 头部数据的校验和 | |
[Header checksum status: Unverified] | 头部数据的校验和状态 | |
Source Address: 10.22.35.213 | 源IP 地址 | |
Destination Address: 220.181.38.251 | 目的IP 地址 |
1)在设计以太网时,人为规定了每个帧的最大长度1500字节 (即除去以太网帧首部的数据部分),作为每次数据传输单元(即MTU)。
2)物理层会限制每次发送数据帧的最大长度,当网络层收到一份待发送的IP数据报时,会进行选路(选择出接口),并查询该接口MTU值。
3)如果IP数据报中的数据长度大于该接口MTU值,会发两种情况:丢包或分片。当IP数据报开启允许分片功能,则会进行分片,否则就丢包。
例如分析IP分片数据包分析
4)IP分片数据包
由于以太网数据报的“数据”部分最长只有1500字节,因此如果IP数据报超过了1500字节,就需要分割成多个以太网数据包分开发送。
在使用ping命令时,默认是不会超过1500字节的,所以如果想要获取IP分片包,需要指定发送的ICMP包大大小。
比如: ping 192.168.0.1 -l 3000 指定获取包的大小为3000
5)分析IP分片数据包分析
在该获取文件中,123帧和678帧是一个完整的ping包,其中123是一个请求包,678是响应包。
1》分析 第1帧数据包
2》分析第2帧数据包
3》分析第3帧数据包
5、过滤条件-抓获过滤器
5.1、对源地址及目的地址过滤
ip.src == ip地址
ip.dst == ip地址
5.2、对源地址或者目的地址过滤
ip.addr == ip地址
5.3、对源地址或者目的端口过滤
tcp.port == 80
5.4、大于某个端口的过滤
tcp.port >= 60000
5.5、协议过滤
协议过滤 直接在filter框中输入协议名,如过滤HTTP协议,则http
5.6、http协议相关过滤 过滤出请求地址中包含“user”的请求
http.request.uri contains User
5.7、过滤域名
http.host == www.baidu.com
5.8、模糊过滤域名
http.host contains baidu
5.9、过滤请求的content_type类型
http.content_type == 'text/html'
5.10、过滤http响应状态码
http.response.code == 200
5.11、过滤含有指定cookie的http数据包
http.cookie contains userid
5.12、捕获多端口的数据包,可以使用and来连接
udp.port >= 2048
5.13、针对长度和内容的过滤
udp.length < 20
http.content_length <=30
5.14、针对uri 内容的过滤
http.request.uri matches "user" (请求的uri中包含“user”关键字的) matches 后的关键字是不区分大小写的。
http.request.uri contains "User" (请求的uri中包含“user”关键字的)
5.15、过滤出请求地址中包含“user”的请求,不包括域名
http.request.uri contains "User"
5.16、精确过滤域名
http.host==baidu.com
5.17、模糊过滤域名
http.host contains "baidu"
5.18、过滤请求的content_type类型
http.content_type =="text/html"
5.19、过滤http请求方法
http.request.method=="POST"
http.request.method=="GET"
5.20、过滤tcp端口
tcp.port==80
http && tcp.port==80 or tcp.port==5566
5.21、过滤http响应状态码
http.response.code==302
5.22、过滤含有指定cookie的http数据包
http.cookie contains "userid"
5.23、比较符号
与:&&或者and
或:||或者or
非:!或者not
5.24、常用表达式实例
src www.baidu.com
dst www.baidu.com
5.25、过滤出源mac地址的数据包
src ether host 98:1a:35:98:09:6f
5.26、不抓取广播包
!broadcast
5.27、通过mac地址过滤
ether host 98:1a:35:98:09:6f
6、报文分片说明
如果当传输数据量超过设置的MTU时,IP就会将数据报进行分片,将一个超过MTU的数据报分为多个不大于MTU的数据报进行发送。接收端收到后再进行组装,形成完整的数据报。在进行分片时,IP通过设置MF标志位为1作为标识是否为最后一个分片。
mtu 设置当前接口的最大传输单元限制MTU
第一个包的MF字段被设置成1,说明还有其他分片,而最后一个包的MF字段为0,标志着这是最后一个分片
6.1 有分片说明
6.2 没有分片说明