使用 Wireshark 选择需要抓包的网络方式,并设置过滤器条件,当有数据通信后即可抓到对应的数据包,这里将分析其每一帧数据包的结构。
以HTTP协议为例,一帧数据包一般包括以下几个部分:
- Frame:物理层的数据帧情况。
- Ethernet II :数据链路层以太网帧头部信息。
- Internet Protocol Version 4:以太网协议层。
- Transmission Control Protocol:传输控制协议。
- HyperText Transfer Protocol:超文本传输协议。
对于各种协议而言,前三层基本一样,第四层开始就可以出现TCP, UDP 协议,第五层就有HTTP 应用层协议等。
第一层:Frame:(物理层)
1 // 第8056帧,有507个字节在线,共4056位,实际在接口0上捕获到507个字节 2 Frame 8056: 507 bytes on wire (4056 bits), 507 bytes captured (4056 bits) on interface 0 3 // 接口ID:0 4 Interface id: 0 (\Device\NPF_{7920DB7B-B8DB-417F-8C85-72E6DCCD61C5}) 5 // 封装类型 6 Encapsulation type: Ethernet (1) 7 // 到达时间 8 Arrival Time: Aug 8, 2019 15:45:00.750794000 中国标准时间 9 // 包偏移量 10 [Time shift for this packet: 0.000000000 seconds] 11 // 新纪元时间 12 Epoch Time: 1565250300.750794000 seconds 13 // 两帧之间的时间间隔 14 [Time delta from previous captured frame: 0.000326000 seconds] 15 // 捕获到显示的时间间隔 16 [Time delta from previous displayed frame: 0.126423000 seconds] 17 // 此帧与第一帧的时间间隔 18 [Time since reference or first frame: 197.144051000 seconds] 19 // 帧号 20 Frame Number: 8056 21 // 帧长度 22 Frame Length: 507 bytes (4056 bits) 23 // 捕获的帧长度 24 Capture Length: 507 bytes (4056 bits) 25 // 帧是否标记 26 [Frame is marked: False] 27 // 帧是否忽略 28 [Frame is ignored: False] 29 // 帧内封装的协议层次结构 30 [Protocols in frame: eth:ethertype:ip:tcp:http] 31 // 着色标记的协议 32 [Coloring Rule Name: HTTP] 33 // 着色规则显示的字符串 34 [Coloring Rule String: http || tcp.port == 80 || http2]
第二层:Ethernet II (数据链路层以太网帧头部信息)
1 // 源MAC地址:TexasIns_ce:a9:4b (68:c9:0b:ce:a9:4b) 2 // 目标MAC地址:AplexTec_0d:4e (40:d8:55:16:ad:4e) 3 Ethernet II, Src: AsustekC_4d:bc:f2 (70:8b:cd:4d:bc:f2), Dst: Hangzhou_91:be:b8 (d4:61:fe:91:be:b8) 4 // 目标MAC地址 5 Destination: Hangzhou_91:be:b8 (d4:61:fe:91:be:b8) 6 // 源MAC地址 7 Source: AsustekC_4d:bc:f2 (70:8b:cd:4d:bc:f2) 8 // IP类型 9 Type: IPv4 (0x0800)
第三层:Internet Protocol Version 4(以太网协议层)
1 // IPv4 协议,源IP:192.168.1.50, 目的IP:111.202.102.36 2 Internet Protocol Version 4, Src: 192.168.1.50, Dst: 111.202.102.36 3 // 版本4 4 0100 .... = Version: 4 5 // 头长度20字节 6 .... 0101 = Header Length: 20 bytes (5) 7 // 差分服务字段 8 Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) 9 // 总长度 10 Total Length: 493 11 // 鉴别 12 Identification: 0x90c2 (37058) 13 // 标志 14 Flags: 0x4000, Don't fragment 15 // 生存期 16 Time to live: 64 17 // 协议名称 18 Protocol: TCP (6) 19 // 头部校验和 20 Header checksum: 0x0000 [validation disabled] 21 // 头部校验和检测状态 22 [Header checksum status: Unverified] 23 // 源IP 24 Source: 192.168.1.50 25 // 目标IP 26 Destination: 111.202.102.36
第四层:Transmission Control Protocol(传输控制协议)
1 // 传输控制协议,源端口:4434,目标端口:80,序号1,确认号:1,长度:453 2 Transmission Control Protocol, Src Port: 4434, Dst Port: 80, Seq: 1, Ack: 1, Len: 453 3 // 源端口:4434 4 Source Port: 4434 5 // 目标端口:80 6 Destination Port: 80 7 // 流索引 8 [Stream index: 105] 9 // TCP段长度 10 [TCP Segment Len: 453] 11 // 序号 12 Sequence number: 1 (relative sequence number) 13 // 下一个序号 14 [Next sequence number: 454 (relative sequence number)] 15 // 确认号 16 Acknowledgment number: 1 (relative ack number) 17 // 头部长度 18 0101 .... = Header Length: 20 bytes (5) 19 // 标记 20 Flags: 0x018 (PSH, ACK) 21 // 窗口大小 22 Window size value: 32768 23 // 计算窗口大小 24 [Calculated window size: 262144] 25 // 窗口大小乘积因子 26 [Window size scaling factor: 8] 27 // 校验和 28 Checksum: 0x99a8 [unverified] 29 // 校验和监测状态 30 [Checksum Status: Unverified] 31 // 紧急指针 32 Urgent pointer: 0 33 [SEQ/ACK analysis] 34 [Timestamps] 35 // TCP负载 36 TCP payload (453 bytes)
第五层:HyperText Transfer Protocol(超文本传输协议)
1 // 超文本传输协议(HTML) 2 Hypertext Transfer Protocol 3 // POST请求 4 POST /q HTTP/1.1\r\n 5 // 缓存控制 6 Cache-Control: no-cache\r\n 7 // 连接类型 8 Connection: Keep-Alive\r\n 9 // 编辑注解 10 Pragma: no-cache\r\n 11 // 用户代理 12 User-Agent: SESC\r\n 13 // 内容长度 14 Content-Length: 719\r\n 15 [Content length: 719] 16 // 主机 17 Host: get.sogou.com\r\n 18 \r\n 19 // 完整请求地址 20 [Full request URI: http://get.sogou.com/q] 21 [HTTP request 47/57] 22 // 前一请求所在帧 23 [Prev request in frame: 5904] 24 // 响应帧 25 [Response in frame: 5910] 26 // 下一请求帧 27 [Next request in frame: 5912] 28 // 文件数据 29 File Data: 719 bytes 30 // 数据 31 Data (719 bytes)
HTTP协议的内容根据请求情况会有所不同,需要具体情况具体分析。