如何使 tcpdump 不打印 tcp 标头?

cod*_*der 32 linux tcpdump

我试过这个:

tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Run Code Online (Sandbox Code Playgroud)

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

小智 18

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

tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Run Code Online (Sandbox Code Playgroud)

要仅查看对话的一侧,您可以使用 tcpdump 过滤器,例如dst port 23.

  • 为什么需要以 root 身份启动 `tcpflow`? (4认同)

Bar*_*ter 10

我觉得最优雅的解决方案就是放弃 tcpdump。没有任何类型的管道:

tcpflow -c port 6667
Run Code Online (Sandbox Code Playgroud)

就是这样。


Jos*_*osh 5

我不确定tcpdump...的确切语法实际上,我已将此问题标记为最喜欢的问题,因为我想知道!但作为替代解决方案,您可以尝试使用tcpflow。它的工作方式基本相同,但它打印的 ASCII 输出要好得多;它排除了标头并按流顺序打印数据包,因此有时比tcpdump.


Edu*_*nec 5

一种快速但肮脏的方法是通过字符串过滤输出:

tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
Run Code Online (Sandbox Code Playgroud)

有时您没有其他工具,为了快速查看有效负载,这就足够了。当然,如果您需要精确的有效负载进行注入或精确的分析,那就不好了。