前言
来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次,一次貌似固定在美国,一次会在其他地区,像是欧洲或亚洲。Packet Challenge 是大会其中一个比较有意思的活动环节,通过一系列数据包案例设置关卡,参会人员进行分析挑战,测试综合分析能力。
题目信息
本次案例为 Sharkfest 2015 Packet Challenge 中的第二个题目 GO GO SPEED RACER,数据包跟踪文件为 http‐gogo.pcapng 。
主要描述如下:
- What is the HTTP response time for the GET / request in packet 4?
- How many packets have the SYN bit set on in this trace file?
- What is the name of the largest HTTP object downloaded to this client?
- How long did it take to download the browser tab icon, favicon.ico (include TCP connection setup/teardown)?
- Frame 131 is a spurious retransmission. Which previous frame caused this to be marked “spurious”?
数据包信息
数据包跟踪文件基本信息如下:
λ capinfos http-gogo.pcapng
File name: http-gogo.pcapng
File type: Wireshark/... - pcapng
File encapsulation: Ethernet
File timestamp precision: microseconds (6)
Packet size limit: file hdr: (not set)
Number of packets: 904
File size: 670 kB
Data size: 639 kB
Capture duration: 25.295004 seconds
First packet time: 2013-05-17 04:34:45.147106
Last packet time: 2013-05-17 04:35:10.442110
Data byte rate: 25 kBps
Data bit rate: 202 kbps
Average packet size: 707.62 bytes
Average packet rate: 35 packets/s
SHA256: d7206ad61a744fe27a62fc4ee1798f5a925e946dbd18fcf23e53790da23e384d
RIPEMD160: 4a3c95a711886b96fcbdac63c5abbc917ced054e
SHA1: 5888fedc0be380ec14be6e2b79eb1bda889edc35
Strict time order: True
Capture oper-sys: 64-bit Windows 7 Service Pack 1, build 7601
Capture application: Dumpcap 1.10.0pre1-49307 (SVN Rev 49307 from /trunk-1.10)
Number of interfaces in file: 1
Interface #0 info:
Name = \Device\NPF_{6E79FEC0-FF79-4970-96E4-EEFF300A9B9F}
Encapsulation = Ethernet (1 - ether)
Capture length = 65535
Time precision = microseconds (6)
Time ticks per second = 1000000
Time resolution = 0x06
Operating system = 64-bit Windows 7 Service Pack 1, build 7601
Number of stat entries = 1
Number of packets = 904
λ
Winows 7 系统上直接通过 Wireshark 捕获,无截断,捕获数据包数量 904 个,捕获持续时间为 25.3 秒,平均速率 202 kbps,其中 IPv4 和 TCP 会话信息较多。
专家信息显示如下,其中告警级别中存在 TCP 零窗口、乱序、分段未捕获到等问题,相对数量不是那么多,需要实际进入数据包分析。
数据包分析
因题目和问题和 HTTP 相关,简单筛选辨别下数据包信息,通过 tcp.port
过滤出 HTTP 或 HTTPS 相关的数据包数量为 904 ,和此数据包跟踪文件数据包总量一样,另 TCP 流数量经排序去重统计后得知为 51。
λ tshark -r http-gogo.pcapng -Y "tcp.port in {80,443}" | wc -l
904
λ tshark -r http-gogo.pcapng -Y "tcp.port in {80,443}" -T fields -e tcp.stream | sort -n | uniq | wc -l
51
考虑到所涉及数据包信息较多,故直接进入各题目实际分析。
1. What is the HTTP response time for the GET / request in packet 4?
数据包 4 中的 GET / request 的 HTTP 响应时间是多少?
分析步骤
No.4 数据包为一个 HTTP GET / request ,在 Packet Details
视图中可以看到 Wireshark 提示 [Response in frame:7]
,说明 HTTP Response 数据包在 No.7,同时在 [Packet List]
视图中最左竖边也有两个横向的小箭头标识,一个指向 No.4,另一个指向 No.7 ,同样说明是一对 HTTP 的请求和响应数据包。
因为要分析的是 HTTP 响应时间的值,所以转向 No.7 数据包细节中,可以看到 [Time since request: 0.204365000 seconds]
,这个就是 Wireshark 根据上下文所关联 HTTP Request 数据包时间所得出的时间间隔。
分析答案
数据包 4 中的 GET / request 的 HTTP 响应时间是:0.204365000 秒。
2. How many packets have the SYN bit set on in this trace file?
数据包跟踪文件中有多少个数据包包含 SYN 标志位设置。
分析步骤
这个题目比较简单,通过 TCP Flags 过滤即可,但在此想说一点的是在 Wireshark 显示过滤中,tcp.flags.syn
和 tcp.flags.syn == 1
这两者是有明显区别的,前者指的是该字段存在与否(包含 0 和 1),而后者才是 SYN 置 1(也就是过滤出 TCP 三次握手中的 SYN 和 SYN/ACK) 。
通过 tcp.flags.syn == 1
过滤得出所有的 SYN 和 SYN/ACK 数据包共有 101 个,占比 11.2%。
使用 Tshark 方式过滤如下
λ tshark -r http-gogo.pcapng -Y "tcp.flags.syn==1" | wc -l
101
λ
分析答案
数据包跟踪文件中有多少个数据包包含 SYN 标志位设置:101 个。
3. What is the name of the largest HTTP object downloaded to this client?
下载到此客户端的最大 HTTP object 的名称是什么?
分析步骤
HTTP object 可以直接通过 Wireshark File
-> Export Objects
-> HTTP...
得到以下信息。
之后通过 Size
从大到小排序即可,因为同一个文件可能存在于多个数据包,所以再下拉遍历下数据包文件名和大小,可以看到实际最大一个文件是 OpenSans-Semibold.ttf 。
文件 OpenSans-Semibold.ttf 大小为 221328 字节。
个人来说,本道题用 Tshark 来操作分析可能更加简单,通过 --export-objects
参数导出 HTTP Object 到 test 文件夹中。
tshark -r http-gogo.pcapng -q --export-objects http,test
test 文件夹中所有的 HTTP Object 如下
分析答案
下载到此客户端的最大 HTTP object 的名称是:OpenSans-Semibold.ttf 。
4. How long did it take to download the browser tab icon, favicon.ico (include TCP connection setup/teardown)?
下载浏览器标签图标 favicon.ico (包括 TCP 连接设置/拆除)需要多长时间?
分析步骤
因为需要找到包含下载 favicon.ico
的 TCP 连接,所以可以先通过 http 过滤 uri 的方式找到该连接
http.request.uri contains "favicon.ico"
TCP Stream 为 47
展开该流后,可得相关数据包,共 13 个。
而此流的时间,可以直接点选 No.846 详细信息,[Timestamps]
中可以得到最后一个数据包和第一个数据包的时间差值。
同样在会话视图中也可以看到该流的统计时间,0.1462 秒。
分析答案
下载浏览器标签图标 favicon.ico (包括 TCP 连接设置/拆除)需要:0.146238000 秒。
5. Frame 131 is a spurious retransmission. Which previous frame caused this to be marked “spurious”?
数据帧 131 为一个虚假重传,是哪一个前帧导致这个帧被标记为“虚假”?
分析步骤
虚假重传,简单来说就是在数据包跟踪文件中针对某个 Seq Num 的数据包已经 ACK 确认过,之后却又收到一次同样 Seq Num 的数据包。
根据 No.131 数据帧所在 TCP 流分析,可以看出 No.121、No.126 和 No.127 已经完成了一次 TCP 四次挥手,但服务器却由于某种问题又发送了一次 No.130 ACK,以及 No.131 重传的 FIN/ACK,疑似服务器并没有收到 No.127 而产生的超时重传。
参考 Wireshark 官网文档对于 TCP Spurious Retransmission
的定义:
TCP Spurious Retransmission
Checks for a retransmission based on analysis data in the reverse direction. Set when all of the following are true:
- The SYN or FIN flag is set.
- This is not a keepalive packet.
- The segment length is greater than zero.
- Data for this flow has been acknowledged. That is, the last-seen acknowledgement number has been set.
- The next sequence number is less than or equal to the last-seen acknowledgement number.
Supersedes “Fast Retransmission”, “Out-Of-Order”, and “Retransmission”.
分析答案
数据帧 131 为一个虚假重传,是哪一个前帧导致这个帧被标记为“虚假”:No.127 。