是否可以指定 tcpdump 以便它在将数据包打印到 STDOUT 之前以不同的方式解释数据包?

是否可以指定 tcpdump 以便它在将数据包打印到 STDOUT 之前以不同的方式解释数据包?

我正在使用 iperf 来查明数据包重新排序问题。不幸的是,tcpdump 不知道如何解析 iperf 的 UDP 有效负载,而我可以使用 UDP 有效负载来查明问题。我知道 iperf 将数据包序列 ID 存储在 UDP 有效负载的前 32 位中。

有没有一种优雅的方式可以告诉 tcpdump,我希望它将 iperf 的 UDP 有效负载中的前 32 位解释为十进制、无符号的 32 位整数,并在每个数据包的 STDOUT 中打印这个整数?

一个快速的解决方案似乎是使用 tcpdump -X 标志在十六进制转储中打印数据包内容,然后通过我的程序将此 STDOUT 传输出去,但我必须自己编写这个相当复杂的程序来处理网络字节序问题等等。

答案1

改变 tcpdump 解释数据包数据的方式的唯一方法是获取源代码,修改它以按照您想要的方式解释数据包数据,编译生成的源代码,然后使用生成的二进制文件。

如果你不想这样做,也许你可以使用沙克相反;如果它不理解 iperf 数据包,并且它是用 Lua 构建的,您可以为这些数据包编写一个 Lua 解析器。

相关内容