背景:有一台可以tcpdump的OpenWrt路由器,用它来抓下面的客户端的数据包。以前我一直都是把tcpdump的结果保存成.cap文件再传到PC上用Wireshark打开,直到今天,才学会了更方便快捷的办法。网上给出的命令是这样的:

plink.exe -ssh -pw xxx root@192.168.10.1 "/usr/sbin/tcpdump -U -s 0 -i br-lan host 192.168.10.106 -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -S -i -

其中plink是putty自带的一个工具,网上搜索putty找安装包安装。试了一下,确实可以!

为什么可以?

由“|”可见它是通过管道来传输的,难道数据还能直接从输入输出传输?因此去看看文档,并找到了答案:

在tcpdump的manpage中得知,
最重要的参数是”-w -“,当文件名是”-“时,输出原数据包到stdout;
-U参数是让数据包打印时直接输出到stdout而不是在输出缓存满后再输出;
”-s 0″表示设置最大数据包长度为默认值(262144 Bytes)。

而从Wireshark的帮助中可知,当抓包接口为”-“时,就从stdin读取数据,所以就ok了。