我试过这个:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
我只需要ascii的一部分。 我如何删除其余的?
正如Josh所build议的,tcpflow只能将TCP数据包数据打印到文件或STDOUT中。 你可以像这样pipetcpdump到tcpflow:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
要仅查看对话的一端,可以使用tcpdump的filter,例如dst port 23 。
我不确定tcpdump的确切语法…实际上,我已经将这个问题标记为最喜欢的,因为我想知道! 但作为替代解决scheme,您可以尝试使用tcpflow 。 它的工作方式基本相同,但打印ASCII输出要好得多; 它排除了头信息并按顺序打印数据包,所以比tcpdump更容易阅读和跟踪。
快速和肮脏的方法是通过string筛选输出:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
有时你没有其他的工具,只需要快速浏览一下有效载荷就足够了。 当然,如果您需要精确的有效载荷进行注射或进行精确的分析,那就不好了。
如果你只需要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' ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'
上周我也遇到了同样的问题 – 我使用wireshark gui,并为有趣的数据包做了“可读的ascii”。
我(成功地)试图用一个http请求来定位一个web服务和它的XML答案的问题。
我觉得最优雅的解决scheme只是沟通tcpdump。 没有任何types的pipe道:
tcpflow -c port 6667
就是这样。