linux – tcpdump在捕获期间截断到UDP数据包中有用数据的1472字节

前端之家收集整理的这篇文章主要介绍了linux – tcpdump在捕获期间截断到UDP数据包中有用数据的1472字节前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个与网络一起工作的应用程序.为了进行一些测试,我需要重现前一天的流程.但与此同时,不允许停止当前工作的听众.我也无法重写现有程序以保存传入流.为了解决我的任务,我决定使用tcpdump.

我使用以下命令在目标计算机上运行tcpdump:

tcpdump -w capture.cap -n "dst host host.domain.com and port 5555"

当我用tcpick或scapy读取capture.cap时.我可以看到所有超过1472字节的有用数据被截断为长度为1472.但是在标题中它仍然写入了数据包的原始长度.
我可以判断,UDP数据包分裂为几个然后再连接.但是tcpdump可能会过滤掉所有没有标头的软件包(应该只出现在第一个数据包中)

有没有办法转储完整的UDP包?

解决方法

如果IP数据包大于发送数据包的网络链路的MTU,则IP会将其分段为适合网络的IP数据包;这是由IP层完成的,而不是UDP层.

以太网的MTU通常为1500字节(最大以太网数据包大小为1518,其中包括14字节的报头,1500字节的有效负载和4字节的FCS).如果没有选项,则IPv4标头为20个字节,UDP标头为8个字节,因此最大UDP有效负载大小为1500-28 = 1472.

因此,IP将数据包拆分为两个或多个片段,并在接收机器上重新组装它们.

有关tcpdump未捕获除第一个片段以外的任何片段的原因的讨论,请参阅相关问题.

猜你在找的Linux相关文章