利用Wireshark和tcpdump对整个局域网进行实时抓包
1. 前言
有时我们需要对局域网中两个设备之间的通讯进行抓包调试,一种比较方便的方式就是在路由器上通过tcpdump抓包,然后传回电脑上,利用Wireshark查看抓包内容。
本文将以一个OpenWrt路由器为例,展示抓包过程。
参考文章:使用 tcpdump 和 Wireshark 进行远程实时抓包分析 - This Cute World

2. 软件安装
2.1. PC上安装Wireshark
官网下载安装包然后安装即可,安装时,一定要勾选:

2.2. 路由器上需要有tcpdump
我是在路由器固件编译时就编译了tcpdump和libcap。选择为<*>号是随固件一起编译,选择为<M>是作为包进行编译。-*-表示强制随固件一起编译,因为有其他包依赖它,所以它必须选中。
Network —> tcpdump

Libraries —> libcap:

如果你不是自己编译的固件,也可以网上下载别人编译好的ipk传到OpenWrt上安装即可:

在路由器上进行测试:
tcpdump --help |

3. 利用Wireshark调用路由器上的tcpdump进行抓包
(1)打开Wireshark,选择捕获——选项:

(2)选择SSH remote capture,点击开始

(3)输入路由器的ip地址和ssh端口号(默认22)

(4)输入路由器用户名和密码/密钥

我这里用的是密钥而非密码,请参考:最简洁清爽的ssh使用方案 | 一苇万顷 (jayant-tang.github.io)。
你也可以用密码
(5)tcpdump设置

参数设置:
Remote Interface:路由器上要抓包的接口,可以在路由器管理网页上查看,也可以用
ifconfig查看,这里是br-lan
Remote capture command selection:路由器上选择的抓包工具,这里是
tcpdumpRemote capture filter:远程抓包的规则,可以把本机的IP地址填进去过滤,防止Wireshark抓自己和路由器之间的ssh包。比如
not (host 192.168.2.2 and port 22)。这里可以用not,or和and逻辑,可以过滤IPv4/IPv6地址和端口号。这个地方是远程过滤器,是抓包时就过滤,后面Wireshark里面还可以再次设置本地过滤器。
(6)开始抓包
最后点击开始,即可在Wireshark中看到路由器br-lan的包了。

与此同时,我们可以去路由器上看看Wireshark是怎么用tcpdump抓的:
$ root@OpenWrt:~# ps | grep tcpdump |
如上,可以看到Wireshark调用的tcpdump命令以及参数。


