如何让 tcpdump 不打印 tcp 标头?

如何让 tcpdump 不打印 tcp 标头?

我尝试过这个:

tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'

我只需要其中的 ascii 部分。如何删除其余部分?

答案1

正如 Josh 所建议的,tcpflow 可以只将 TCP 数据包数据打印到文件或 STDOUT。您可以像这样将 tcpdump 传输到 tcpflow:

tcpdump -i lo -l -w - port 23 | tcpflow -C -r -

如果只想查看对话的一方,你可以使用 tcpdump 的过滤器,例如dst port 23

答案2

我觉得最优雅的解决方案就是抛弃 tcpdump。不要任何类型的管道:

tcpflow -c port 6667

就是这样。

答案3

我不确定确切的语法tcpdump...事实上,我已将这个问题标记为收藏,因为我想知道!但作为替代解决方案,您可以尝试使用tcpflow它的工作原理基本相同,但它打印 ASCII 输出的效果要好得多;它排除了报头并按顺序将数据包作为流打印,因此有时比 更容易阅读和理解tcpdump

答案4

如果只需要 ASCII 部分,则可以使用:tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'或使用 ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'

相关内容