Appearance
Appearance
Wireshark 支持对跨越多个 TCP segments 的 PDU 进行 reassembly,适用于大量构建在 TCP 之上的协议。这些协议包括但不限于 iSCSI、HTTP、DNS、Kerberos、CIFS、ONC-RPC 等。总体来看,可能大约有 20 种不同协议。若新协议需要,这种支持很容易添加到 Wireshark 中;因此如果你喜欢的协议缺失,请告诉 Wireshark 开发者。
请注意,TCP Reassembly 只有在你捕获了完整 packet,并且该 packet 的所有 checksums 都有效时才会工作。如果你使用 packet slicing,只捕获 packets 的一部分,或者 packets 的 checksums 不正确,即 TCP_Checksum_Verification 失败,那么这些 packets 将被忽略,reassembly 会失败。(你可以在 preferences 中禁用 TCP_Checksum_Verification 测试。)
要启用此功能,必须启用该 preference:
此选项将允许 TCP layer 为所有请求该功能的协议,对跨越多个 segments 的 PDU 执行 reassembly。 请注意,这本身还不够;上述 preference 是在 TCP layer 启用它的总开关,你还必须确保相应协议特定的 reassembly option 也已启用。 HTTP 的协议特定 reassembly option 如下:
例如,如果你想 reassemble 跨越多个 segments 的 HTTP PDU,就必须启用上面的全部三个选项。
此功能需要大量内存,因此默认始终禁用。我建议如果要使用它,只在绝对需要时临时启用,其余时间保持关闭。(如果你不小心保持开启,然后把一个 1GByte trace 加载到 wireshark 中,你无法想象会需要多少内存。)
这是一个如何 reassemble HTTP stream,并从 HTTP PDU 中提取 JPEG image 并保存到文件的示例。 首先从 SampleCaptures 页面下载示例捕获 SampleCaptures/http_with_jpegs.cap.gz。 然后启用上面的全部三个 preferences。 然后选择 packet #479,并点击 JPEG protocol 以选中它:
然后只需右键点击 JPG protocol,选择 “Export Selected Bytes”,并将其保存到文件。如果一切正常,你现在就会得到一张漂亮的 SeaWorld in SurfersParadise Dolphin Show 的 JPEG,可以欣赏了。
(看起来 HTTP packets 的 reassembly 会消耗极大量 CPU。实现中一定有某些次优之处,应该有人看看。选择这种 packet 时,它还喜欢多次重新扫描 capture list。)
Wireshark 实现本身应该没问题。造成麻烦的是 packet bytes 的显示。我们使用的 GTK widget 似乎无法在合理时间内处理数十 kB(甚至更多)的文本。我们可能需要找到改进方法——实现自己的 widget,或者以某种方式调整现有 widget。- UlfLamping
Allow subdissector to desegment TCP streams
Imported from https://wiki.wireshark.org/TCP_Reassembly on 2020-08-11 23:26:31 UTC