背景:有一台可以tcpdump的OpenWrt路由器,用它来抓下面的客户端的数据包。以前我一直都是把tcpdump的结果保存成.cap文件再传到PC上用Wireshark打开,直到今天,才学会了更方便快捷的办法。网上给出的命令是这样的:
plink -ssh USER@HOST -pw PASS "tcpdump -s 0 -U -n -i br-lan -w - not port 22" | wireshark -k -i -
其中plink是一个Windows下的命令行SSH客户端程序(Linux系统下改成ssh的相应命令)。试了一下,确实可以!
为什么可以?
由“|”可见它是通过管道来传输的,难道数据还能直接从输入输出传输?因此去看看文档,并找到了答案:
在tcpdump的manpage中得知,最重要的参数是”-w -“,当文件名是”-“时,输出原数据包到stdout;-U参数是让数据包打印时直接输出到stdout而不是在输出缓存满后再输出;”-s 0″表示设置最大数据包长度为默认值(262144 Bytes)。
而从Wireshark的帮助中可知,当抓包接口为”-“时,就从stdin读取数据,所以就ok了。