我正在寻找在Windows下捕获网络流量而不存储数据包的解决方案。
这将是网络故障排除脚本的一部分,该脚本应该监控48小时内的性能。
我曾经在基于tcpdump构建的bash中执行类似的脚本:
tcpdump --no-promiscuous-mode -i $netif -w $dumpdir/$stamp2.ping.pcap
不幸的是,WiFi接口驱动程序不够可靠,我花了很多时间和精力来处理TS Linux错误而不是网络错误。所以我决定放弃。
基于Windows(PS)下的dumpcap的新版本:
.\dumpcap.exe -i $AdapterName -w "$outputPath.$timeStamp.pcap" -p -a duration:3600
同样在两种情况下,Iperf都用于生成缓慢恒定的流量。由于2mbps流量占用大量磁盘空间,因此在1小时后重新启动捕获并将旧pcap文件压缩为存档文件。
这部分脚本在Linux下运行非常温和,压缩的pcap文件只是原始大小的一小部分。
我注意到tcpdump和dumpcap之间存在显着差异。 Tcpdump不存储包的数据块。见图片。
tcpdump - package capture example
dumpcap - package capture example
正如您所看到的,tcpdump只存储零而不是数据。
我正在寻找与dumpcap类似的解决方案,或者如果不可能使用不同的工具。唯一标准:它必须在Windows和免费/开源工具上可用。
答案 0 :(得分:0)
正如您所见,tcpdump只存储零而不是数据。
据我所知,tcpcump
不会写入零代替正在传输的数据。如果您看到零,则传输零。
如果您不需要或不需要有效负载,则可以使用带有tcpdump
或dumpcap
的 snaplen 来限制捕获的字节数。使用-s <snaplen>
选项指定了snaplen,其中snaplen
是要保存的数据包中的字节数。这两个工具对此功能使用相同的选项。如果你要限制捕获的字节数,那么生成的捕获文件显然要小得多,你可能不需要费心压缩它们。
顺便说一句,我似乎很奇怪你会使用dumpcap's
"-a duration:3600"
选项在一小时后停止捕获,只需要 手动 重新启动它而不是使用"-b duration:3600"
选项, 自动 停止捕获到文件并在每小时后开始捕获到下一个文件。还有其他-b
选项,您可以将它们与"-b duration:3600"
选项结合使用,这将允许您限制保留的文件总数或每个文件的最大大小。有关这些选项的详细信息,请参阅dumpcap man page。