利用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:路由器上选择的抓包工具,这里是
tcpdump
Remote 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
命令以及参数。