1. 前言 有时我们需要对局域网中两个设备之间的通讯进行抓包调试,一种比较方便的方式就是在路由器上通过tcpdump抓包,然后传回电脑上,利用Wireshark查看抓包内容。
本文将以一个OpenWrt路由器为例,展示抓包过程。
参考文章:使用 tcpdump 和 Wireshark 进行远程实时抓包分析 - This Cute World
2. 软件安装2.1. PC上安装Wireshark 官网下载安装包然后安装即可,安装时,一定要勾选:
2.2. 路由器上需要有tcpdump 我是在路由器固件编译时就编译了tcpdump和libcap。选择为<*>号是随固件一起编译,选择为
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 2131 root 5676 S tcpdump -U -i br-lan -w - not (host 192.168.2.2 and port 22) 8318 root 1248 S grep tcpdump
如上,可以看到Wireshark调用的tcpdump命令以及参数。