Linux
是否可以指定 tcpdump 在將其列印到 STDOUT 之前我希望它以不同的方式解釋數據包?
我正在使用 iperf 來查明數據包重新排序問題。不幸的是,tcpdump 不知道如何解析 iperf 的 UDP 有效負載,我可以用它來查明問題。我知道 iperf 將數據包序列 ID 儲存在 UDP 有效負載的前 32 位中。
有沒有一種優雅的方法來告訴 tcpdump 我希望它將 iperf 的 UDP 有效負載中的前 32 位解釋為十進制、無符號的 32 位整數並在每個數據包的 STDOUT 中列印這個整數?
一個快速的解決方案似乎是使用 tcpdump -X 標誌在十六進制轉儲中列印數據包內容,然後通過我的程序通過管道傳輸這個 STDOUT,但我必須自己編寫這個相當複雜的程序,它必須處理網路字節序問題和很快。
改變 tcpdump 解釋數據包數據的方式的唯一方法是獲取原始碼,修改它以按照您想要的方式解釋數據包數據,編譯生成的原始碼,並使用生成的二進製文件。
如果您不想這樣做,也許您可以使用tshark代替;如果它不理解 iperf 數據包,並且如果它是用 Lua 建構的,你可以為這些數據包編寫一個 Lua 解析器。