我正在编写一个与网络一起工作的应用程序。为了执行一些测试,我需要复制前一天的流程。但同时不允许停止当前工作的侦听器。我也不能重写现有的程序,以保存传入流。为了解决我的任务,我决定使用tcpdump。
我使用以下命令在目标计算机上运行tcpdump:
tcpdump -w capture.cap -n "dst host host.domain.com and port 5555"
当我读到capture.cap的时候,无论是选择还是替罪羊。我可以看到,所有比1472字节更长的有用数据都被截断为长度1472。但是在报头中,它仍然是写入数据包的原始长度。正如我所判断的,UDP数据包被拆分为几个,然后再次连接。但是tcpdump可能会过滤掉所有没有报头的包(应该只出现在第一个包中)。
有任何方法可以转储完整的UDP包吗?
发布于 2014-11-20 09:25:32
如果IP数据包大于正在发送数据包的网络链路的MTU,则IP将将其分割为可适合网络的IP数据包;这是由IP层而不是UDP层完成的。
以太网的MTU通常为1500字节(最大以太网数据包大小为1518,其中包括14字节的报头、1500字节的有效负载和4字节的FCS)。如果没有选项,则IPv4报头为20个字节,而UDP报头为8个字节,因此最大有效负载大小为1500-28 = 1472。
因此,IP将数据包分成两个或多个片段,并在接收机器上重新组装它们。
有关为什么tcpdump不捕获第一个片段以外的任何片段的讨论,请参见相关问题。
发布于 2014-11-20 18:12:50
使用-s 0可以确保捕获整个数据包/帧。如果它是支离破碎的,那么您将从分析转储中了解。
尝试使用wireshark作为pcap的GUI分析器。它将使输出等着色。
https://serverfault.com/questions/645890
复制相似问题