前言

openwrt做为一款基于linux的路由器系统,本身可以安装很多linux平台的工具,今天我们就来玩玩如何将通过路由器的网络数据都抓下来。
首先请您在路由器安装好tcpdump,安装的方法,最好是通过包管理器,毕竟如果依赖包很多的话,手动安装比较繁琐。

思路一

我们可以先在路由器上通过tcpdump等抓包工具将接口的数据先抓下来并保存为标准的抓包文件,然后导回到本机进行后续的分析,这种方式临时使用是可以的,但操作比较麻烦。

思路二

我们通过ssh链接到openwrt的路由,然后通过执行tcpdump的抓包命令,将数据包通过ssh传回到我们的PC机,在PC机上通过wireshark进行分析。

#命令格式
ssh -p ssh端口 -o StrictHostKeyChecking=no ssh用户名@ssh地址 'tcpdump -s 0 -U -n -w - -i br-lan not port ssh端口' | wireshark -k -i -
#对应我的环境的命令
ssh -p 2222 -o StrictHostKeyChecking=no root@192.168.2.1 'tcpdump -s 0 -U -n -w - -i br-lan not port 2222' | wireshark -k -i -
简单的说明
根据openwrt文档,所有的局域网的数据最后都是通过br-lan虚拟网卡来做转发,所以对此网卡进行监控即可
此命令本质是远程在路由器上执行网络监控命令,输入文本到本机的wireshark里面
使用wireshark作为可视化工具来查看

示例:ssh root@192.168.1.1  'tcpdump -s 0 -U -n -w - -i br-lan not port 22' | ./wireshark.exe -k -i -

前面讲述了基本的原理和操作手段,但是缺点是每次都需要输入长串命令行和密码,可以利用linux的一些小操作技巧,简化此过程,做成一个命令工具,方便随时调用。
基本原理:
使用 sshpass 工具来做密码输入
使用 alias 别名来做成命令语句

自动登录语句实现:

sshpass -p 'admin' ssh -p 2222 -o StrictHostKeyChecking=no root@192.168.2.1 'tcpdump -s 0 -U -n -w - -i br-lan not port 2222' | wireshark -k -i -

编辑~/.bash_alias文件,自定义命令行的别名:

alias zshark="sshpass -p 'admin' ssh -p 2222 -o StrictHostKeyChecking=no root@192.168.2.1 'tcpdump -s 0 -U -n -w - -i br-lan not port 2222' | wireshark -k -i -"

后面只需要在shell里面输入zshark就可以完成命令的启动了。

思路三

思路三其实和思路二差不多,不过是通过命名管道来导回数据,在有些情况下比较方便。所以单独记录下来。

mkfifo /tmp/fifo
sshpass -p 'admin' ssh -p 2222 -o StrictHostKeyChecking=no root@192.168.2.1 'tcpdump -s 0 -U -n -w - -i br-lan not port 2222' > /tmp/fifo &
wireshark -k -i /tmp/fifo

参考

  1. tshark + wireshark+sshssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -
  1. tcpdump + wireshark + sshssh root@server.com 'tshark -f "port !22" -w -' | wireshark -k -i -
  2. fifo方式mkfifo /tmp/fifo; ssh-keygen; ssh-copyid root@remotehostaddress; sudo ssh root@remotehost "tshark -i eth1 -f 'not tcp port 22' -w -" > /tmp/fifo &; sudo wireshark -k -i /tmp/fifo;