我尝试过这个:
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'