【发布时间】:2020-05-18 10:45:29
【问题描述】:
我有一个带有一些网络流量的简单 pcap,并且正在使用 tshark 从中获取一些标头信息:
我使用以下命令:
tshark -r ./capture-1-5 -Y "http2" -o tls.keylog_file:ssl-key.log \
-T fields -e frame.number -e _ws.col.Time -e ip.src -e tcp.srcport \
-e ip.dst -e tcp.dstport -e _ws.col.Protocol -e frame.len \
-e _ws.col.Info -E header=y -E separator="," -E quote=d \
-E occurrence=f > desegmented.csv
我意识到,在这种情况下,所有片段都被重新组装,从而产生了巨大的数据包。但是,我不想要重新组装的数据包。所以,我给 tshark 添加了一个额外的选项:
tshark -r ./capture-1-5 -Y "http2" -o tls.keylog_file:ssl-key.log \
-T fields -e frame.number -e _ws.col.Time -e ip.src -e tcp.srcport \
-e ip.dst -e tcp.dstport -e _ws.col.Protocol -e frame.len \
-e _ws.col.Info -E header=y -E separator="," -E quote=d \
-E occurrence=f -o tcp.desegment_tcp_streams:FALSE > segmented.csv
我的直觉是,生成的disassembled.csv 文件应该更大,并且应该包含更多行,因为“MTU 之上的数据包”将显示为多个数据包。
但是,我观察到相反的情况。没有汇编的结果文件更小,行数几乎减半。
-rw-r--r-- 1 root root 210K May 18 18:21 desegmented.csv
-rw-r--r-- 1 root root 97K May 18 18:21 segmented.csv
# cat desegmented.csv |wc -l
2635
# cat segmented.csv |wc -l
1233
这是正常行为吗?由于双向通信(到处丢失数据包),我没有看到(手动)数据包开始消失的位置(以及为什么)或看到任何模式。
我假设可能,在 disassebmled.csv 的情况下,导致至少一个数据包高于 MTU 的每个数据包甚至整个数据包流都被完全丢弃。
我也尝试应用 ip.defragment:FALSE 但结果仍然相同。 谢谢
如需复制,可从here下载文件
【问题讨论】:
-
同时,我已经确定了数百个 TCP 和 TLS 数据包,它们的有效负载值为“重组 PDU 的 TCP/TLS 段”,这些数据包肯定已从
disassembled.csv中删除。然后,查看disassembled.csv中的数据包大小,我发现大多数具有 4 位数大小的数据包也丢失了(约 200 个数据包)。尽管如此,我还是有很多丢失的数据包:S -
我或许可以提供帮助,但您需要提供问题中的文件(pcap/log 文件),以便其他人可以复制此文件(即MCVE)。您可能会遇到 tshark 行为,其中它会将有关数据的信息喷射到文本数据输出中。
-
添加到正文中,谢谢。
-
我手边没有使用 TLS 构建的 tshark 版本,因此无法复制。但是,请注意捕获中没有 IP 分段(如果 ip.flags.mf == 1 || ip.frag_offset > 0,则帧是 IP 分段,您可以在 wireshark 的过滤器中键入)。你的协议栈是 http2/TLS/TCP/IP/Ethernet II。您看到的“碎片”是 TLS 记录被拆分为多个 TCP 帧。为了解码 TLS 并查看 http2,您需要重新组装 TCP 段。如果不这样做,您将只能解码适合单个帧的 TLS 记录。