1. 前言

​ 有时我们需要对局域网中两个设备之间的通讯进行抓包调试,一种比较方便的方式就是在路由器上通过tcpdump抓包,然后传回电脑上,利用Wireshark查看抓包内容。

​ 本文将以一个OpenWrt路由器为例,展示抓包过程。

​ 参考文章:使用 tcpdump 和 Wireshark 进行远程实时抓包分析 - This Cute World

image-20221214212711479

2. 软件安装

2.1. PC上安装Wireshark

​ 官网下载安装包然后安装即可,安装时,一定要勾选:

image description

2.2. 路由器上需要有tcpdump

​ 我是在路由器固件编译时就编译了tcpdumplibcap。选择为<*>号是随固件一起编译,选择为<M>是作为包进行编译。-*-表示强制随固件一起编译,因为有其他包依赖它,所以它必须选中。

​ Network —> tcpdump

image-20221214214847255

​ Libraries —> libcap:

image-20221214215049186

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

image-20221214214611043

在路由器上进行测试:

tcpdump --help

image-20221214215320752

3. 利用Wireshark调用路由器上的tcpdump进行抓包

(1)打开Wireshark,选择捕获——选项

image-20221214215528345

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

image-20221214215620451

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

image-20221214215737318

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

image-20221214215921550

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

你也可以用密码

(5)tcpdump设置

image-20221214220409559

参数设置:

  • Remote Interface:路由器上要抓包的接口,可以在路由器管理网页上查看,也可以用ifconfig查看,这里是br-lan

    image-20221214220526046
  • Remote capture command selection:路由器上选择的抓包工具,这里是tcpdump

  • Remote capture filter:远程抓包的规则,可以把本机的IP地址填进去过滤,防止Wireshark抓自己和路由器之间的ssh包。比如not (host 192.168.2.2 and port 22)。这里可以用notorand逻辑,可以过滤IPv4/IPv6地址和端口号。

    这个地方是远程过滤器,是抓包时就过滤,后面Wireshark里面还可以再次设置本地过滤器。

(6)开始抓包

最后点击开始,即可在Wireshark中看到路由器br-lan的包了。

image-20221214221347037

​ 与此同时,我们可以去路由器上看看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命令以及参数。