前言
来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次,一次貌似固定在美国,一次会在其他地区,像是欧洲或亚洲。Packet Challenge 是大会其中一个比较有意思的活动环节,通过一系列数据包案例设置关卡,参会人员进行分析挑战,测试综合分析能力。
题目信息
本次案例为 Sharkfest 2015 Packet Challenge 中的第三个题目 FTP ME, BABY(🙄 这名字真的是可以),数据包跟踪文件为 tcp-bigftp.pcapng 。
主要描述如下:
- What TCP options are supported by both client and server in this trace file?
- What Window Size(s) are advertised in each Window Update packet?
- What operating system must be supported to use the downloaded file?
- How much is the largest delay preceding a Window Update packet?
- Why does Wireshark indicate the Window Scaling factor is ‐1 in some of the packets?
数据包信息
数据包跟踪文件基本信息如下:
λ capinfos tcp-bigftp.pcapng
File name: tcp-bigftp.pcapng
File type: Wireshark/... - pcapng
File encapsulation: Ethernet
File timestamp precision: microseconds (6)
Packet size limit: file hdr: (not set)
Number of packets: 6120
File size: 11 MB
Data size: 11 MB
Capture duration: 24.668708 seconds
First packet time: 2012-08-02 03:38:39.142142
Last packet time: 2012-08-02 03:39:03.810850
Data byte rate: 468 kBps
Data bit rate: 3748 kbps
Average packet size: 1888.69 bytes
Average packet rate: 248 packets/s
SHA256: bfb28f553bea551a2023825ed6ec1aa2bb57a8893111c8baa804d2ee0a1b3929
RIPEMD160: af787ba3f0cf4f933e35fba11b82276c482a1892
SHA1: c416ef5f71076c7dc1dad7d5f4978d37b2ee41c6
Strict time order: True
Capture oper-sys: 64-bit Windows 7 Service Pack 1, build 7601
Capture application: Dumpcap 1.8.1 (SVN Rev 43946 from /trunk-1.8)
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 = 6120
λ
Winows 7 系统上直接通过 Wireshark 捕获,无截断,文件大小 11MB,捕获数据包数量 6120 个,捕获持续时间为 24.67秒,平均速率 3748 kbps。
协议分层信息统计如下,FTP 控制连接和数据连接等信息。
专家信息显示如下,异常简洁,并且无 Warning 级别信息,只有较多数量的 TCP window update
消息。
数据包分析
数据包跟踪文件初步展开信息如下,实际 TCP Stream 2 条,一条为 FTP 控制连接,一条为 FTP 数据连接。
λ tshark -r tcp-bigftp.pcapng -T fields -e tcp.stream | sort -n | uniq
0
1
1. What TCP options are supported by both client and server in this trace file?
在这个跟踪文件中,客户端和服务器均支持的 TCP options 是什么?
分析步骤
说到 TCP options
,又想起 TCP 首部报文格式图了,经典~ 可以看到 TCP options
是一个可变长度的可选字段。
一般客户端和服务器之间的 TCP 交互以 TCP 三次握手开始,之间所共同支持的 TCP options
也在此阶段进行协商。通过显示过滤表达式过滤出 SYN 和 SYN/ACK 即可
tcp.flags.syn == 1
客户端 No.8 和服务器 No.9 TCP options
细节信息,可见共同支持的有 MSS, Window Scale, SACK, TCP Timestamps
。
分析答案
在这个跟踪文件中,客户端和服务器均支持的 TCP options 是:MSS, Window Scaling, SACK, TCP Timestamps。
2. What Window Size(s) are advertised in each Window Update packet?
在每一个 Window 更新数据包中所通告的 Window Size 是什么。
分析步骤
首先注意的是指定的数据包类别,它是 Window Update packet
,这样先通过显示过滤式筛选,共有 245 个数据包,占比 4.0%。
tcp.analysis.window_update
其次 Window Size 来自于通告 Window 和 Window size scaling facotor(也是 1 中 TCP Options ,客户端和服务器共同支持的结果)的乘积,即 33304 * 2 = 66608 。
当然在 Packet List
视图中通过增加 Window size
信息列也可,全是 66608 。
分析答案
在每一个 Window 更新数据包中所通告的 Window Size 是:66608。
3. What operating system must be supported to use the downloaded file?
下载的文件必须支持什么操作系统?
分析步骤
首先分析在数据包跟踪文件中传输下载的是什么文件,通过控制连接可以看到客户端请求的是 kidsatbeach.jpg
文件。
问题中所描述的是下载,但实际 FTP 数据包中是上传,另外文件格式为 jpg,对于操作系统并没有多了解,必须支持什么操作系统?win 可以,linux 不行嘛?⁉️
分析答案
下载的文件必须支持什么操作系统:win。
答案暂且为 win 吧,也许是我的解题方向有问题。。。
4. How much is the largest delay preceding a Window Update packet?
在 Window 更新数据包之前的最大延迟是多少?
分析步骤
本题理解上同样会有点疑惑,以客户端某一个 Windows Update 数据帧为例 ,所说的之前延迟可能有几种:
- 与上一个捕获数据帧的比较;
- 与上一个显示数据帧的比较(基于TCP 流过滤);
- 与上一个同方向显示数据帧的比较(基于TCP 流过滤)。
本次解题以第 2 种思路分析,首先过滤出 TCP Stream 1 中所有的数据包,导出成一个新的 pcapng 文件。之后在新的 pcapng 文件中通过显示过滤表达式过滤出Windows Updata packet
。
tcp.analysis.window_update
然后在 Packet List
视图中增加信息列,字段为 frame.time_delta
,如下,即为每一个 Window Update packet 与上一个捕获数据帧的时间差值。
此处是与上一个捕获数据帧的时间比较,是因为之前已经过滤出 TCP Stream 并另存为新文件,再经过 tcp.analysis.window_update 过滤出的结果。
通过从大到小排列,可知最大的延迟时间如下,为 0.006486 秒,No.6103 和 No.6102 的时间间隔。
分析答案
在 Window 更新数据包之前的最大延迟是:0.006486 秒。
5. Why does Wireshark indicate the Window Scaling factor is ‐1 in some of the packets?
为什么在某些数据包上 Wireshark 标识 Window Scaling Factor 值为 -1 ?
分析步骤
首先 Window Scaling Factor 为 TCP Options 中的一个字段,在 1 题中曾经说到一般客户端和服务器之间的 TCP 交互以 TCP 三次握手开始,之间所共同支持的 TCP options
也在此阶段进行协商。
而 Window Scaling Factor 的使用,有以下几种情况:
- 客户端和服务器两端均支持的情况下,那么各自 SYN 或 SYN/ACK 所通告的 WS 值在后续数据交互时使用即可, Window size Scaling Factor 标识为该值;
- 客户端和服务器,如有任意一端不支持或是两端都不支持的情况下, 那么在后续数据交互时使用时 Window size Scaling Factor 标识为 -2;
- 还有一种特殊情况,在数据包跟踪文件中并没有捕获到 SYN 和 SYN/ACK 的情况下,也就是 Wireshark 无法判断是否使用了 Window Scaling Factor,那么会在后续数据交互时 Window size Scaling Factor 标识为 -1。
通过显示过滤表达式 tcp.window_size_scalefactor == -1
过滤出的结果,实际上都是 FTP 控制连接的数据包,因为在这一条 TCP Stream 0 下并没有捕获到 TCP 三次握手阶段的报文,所以 Window size Scaling Factor 标识为 -1。而 No.1 的 Window 16114 字节,因为 Window size Scaling Factor 未知,所以 Calculated window size 也为 16114 字节。
Window size Scaling Factor 值为 -1 只是 Wireshark 基于数据包跟踪文件上下文判断,未知实际 Factor 值的情况下标识为 -1,并不代表实际客户端和服务器的 TCP 连接不支持。
分析答案
为什么在某些数据包上 Wireshark 标识 Window Scaling Factor 值为 -1:因为未捕获到 TCP 三次握手 。