使用Wireshark+SSH进行实时tcpdump远程抓包分析

背景:有一台可以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了。


已有4条评论 发表评论

  1. lbxxzmy /

    现在实现不了了 输入命令后wireshark 提示Data written to the pipe is neither in a supported pcap format nor in pcapng format. Please report this to the developers of the program writing to the pipe 能帮一下我吗?

    1. 7forz / 本文作者

      plink -ssh USER@HOST -pw PASS “tcpdump -s 0 -U -n -i br-lan -w – not port 22” | wireshark -k -i –
      这里的命令分成了很多步,你可以先ssh进去,运行 `tcpdump -s 0 -U -n -i br-lan -w – not port 22` 看看有没有输出;
      然后再回到本地,加上前面的plink或ssh命令,看有没有输出;
      最后,才是把这些输出通过管道传给wireshark

  2. 匿名 /

    plink -batch -ssh ..
    plink后面加一个-batch试试,我的可以了

    1. 7forz / 本文作者

      现在的windows都自带ssh了,应该不再需要第三方的plink了😄可以试试?

回复给lbxxzmy 取消回复