RouterOS最全抓包指南: 囊括图形化、命令行模式

2023-07-22 18:29:58 浏览数 (2)

一、前言

在网络分析和监测工具中,RouterOS 抓包被广泛应用于网络安全和故障排除领域。RouterOS 是一种功能强大的路由操作系统,它提供了丰富的功能和工具,支持多种网络协议,用于管理和保护网络。抓包是其中一项重要的功能,它允许管理员捕获、分析和监测网络流量,以便识别潜在的安全威胁和故障。

考虑到各个环境的复杂性及限制性,本文将从图形化、命令行两个维度讲述抓包技巧,同时将深入探讨如何配置和使用 RouterOS 的抓包功能,以及如何解读和分析捕获的网络数据包。

二、图形化抓包

图形化界面抓包是最简单粗暴的方式,如果没有环境限制首推此方式。

1.Packet Sniffer

1)winbox下载

在图形化界面抓包,需要用到Ros的客户端工具winbox,winbox可以在Ros的官网下载:

2)选项概览

使用winbox登录到Ros后,点击 Tools --> Packet Sniffer 即为抓包工具所在之处:

初始界面如下,分为General、Streaming、Filter三部分配置,接下来将说明每个选项的参数含义。

3)General选项说明

通用(General)选项参数含义:

  • Memory Limit:最大使用内存大小,默认100KB;
  • Only Headers:只抓取头部信息;
  • Memory Scroll:捕获的数据包会存储在内存中,直到内存滚动缓冲区被填满。一旦缓冲区达到容量上限,最早捕获的数据包将被丢弃以腾出空间,而新的数据包将继续写入缓冲区;
  • File Name:抓包后保存到的文件名,如果不想保存可以留空;
  • File Limit:抓包文件大小限制,默认1000kb。

4)Streaming选项说明

Streaming选项参数含义:

  • Streaming Enabled:打开Streaming选项,将捕获的数据包转发给指定地址;
  • Server:转发到对端的IP地址;
  • Port:转发给对端的端口;
  • Filter Stream:过滤流,过滤特定流,只有启用此参数后,Filter选项的参数设置才能生效。

5)Filter选项说明

Filter则为具体的过滤规则,以下参数言简意赅,用来指定特定接口、过滤特定IP、Mac地址、协议类型、端口、出入方向等的报文:

6)抓包设置

比如想把抓包指定到文件test.pcap,则如下设置,抓包文件大小最大为1000Mb,最大使用内存为500MB,抓取Wan口的所有报文,则可以如下设置:

7)运行抓包

上述参数设置后,点击右侧的Apply,引用规则,然后点击Start,此时Sniffer已经是running状态:

之后可以点击右侧的PacketsConnectionsHostsProtocols,分别实时查看数据包、连接、主机、协议等具体分类:

抓完后点击STOP停止抓包,生成了一个55MiB大小的test.pcap文件:

右击可以把它download下来,之后使用其他工具分析。

抓到的包是最原始的数据,没有任何其他特殊封装:

2.Wireshark

当我们不想把抓包存放在ros上时,可以通过设置Streaming选项,让ros把收到的包转发给其他服务器。

1)General选项配置

同理,我们限制最大内存为500MiB,File Limit和File Name无需设置,我们不需要保存到文件:

2)Streaming选项配置

勾选Streaming Enabled,并且指定Server为接受抓包的目的IP及端口,可以是任何IP,包括内外网:

3)Filter参数配置

抓取wan口的ICMP协议为示例:

点击右侧的Apply应用设置,并且点击Start开始抓包。

4)在目的Server上捕获报文

登录到指定的Server,并且使用抓包工具,抓取37008端口的数据。

通过udp.port eq 37006过滤到ros转发过来的报文,首先通过IPIP封装了外层协议,Server才能收到外层转发过来的包,内层则是ros最原始的收发包数据:

三、命令行抓包

命令行抓包就是把上述图形化界面的参数设置一遍,没有其它差异。

1.Sniffer

首先ssh到routeros,执行以下命令进入到sniffer:

代码语言:shell复制
[RokasYang@MikroTik] > /tool/sniffer/
[RokasYang@MikroTik] /tool/sniffer>

按tab可以看到sniffper下面有如下命令:

1)edit file-name/edit file-limit

如果想把包保存到ros,执行edit edit file-name命令,之后进入编辑器模式,写入文件命令后,ctrl o 保存退出。

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit file-name

之后编辑抓包文件大小限制:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit file-limit
[RokasYang@MikroTik] /tool/sniffer>

2)edit memory-limit

同理,编辑内存限制,512MiB。

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit memory-limit

3)edit streaming-enabled

抓包保存到本地文件,并且并不需要将报文转发给其它server,确保此选项是no状态:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit streaming-enabled

4)edit filter

编辑过滤规则,和图形界面的参数都能对上,需要设置哪个就edit哪个。

比如抓pppoe-out1口的ICMP报文,则可以设置:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit filter-interface   # 写入pppoe-out1
[RokasYang@MikroTik] /tool/sniffer> edit filter-ip-protocol # 写入icmp

5)start/packet print

执行start命令便开始抓包,使用packet print命令可以输出抓到的请求:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> start
[RokasYang@MikroTik] /tool/sniffer> packet print interval=5

其中interval表示刷新间隔,这里设置为每5s刷新一次。

6)connection/protocol/host print

抓包过程中,连接信息,协议信息,主机信息都可以试试展示出来,并设置刷新间隔,因为指定抓取的ICMP协议,没有连接的概念,所以connection print是过滤不到内容的。

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> protocol print
Columns: PROTOCOL, IP-PROTOCOL, PACKETS, BYTES, SHARE
#  PROTOCOL  IP-PROTOCOL  PACKETS  BYTES  SHARE
0  ip                         213  20586  100%
1  ip        icmp             213  20586  100%
[RokasYang@MikroTik] /tool/sniffer> host print
Columns: ADDRESS, RATE, PEAK-RATE, TOTAL
#  ADDRESS          RATE           PEAK-RATE        TOTAL
0  113.87.50.124    672bps/672bps  1952bps/7.2kbps  8560/13238
1  113.132.176.42   0bps/0bps      0bps/1280bps     0/160
2  114.114.114.114  0bps/0bps      2.7kbps/0bps     886/0
3  114.132.168.144  672bps/672bps  672bps/672bps    8400/8400
4  117.152.35.93    0bps/0bps      1632bps/0bps     3672/0
5  119.29.29.29     0bps/0bps      2.2kbps/0bps     280/0
[RokasYang@MikroTik] /tool/sniffer> connection print

7)stop

停止抓包,执行stop即可,前面定义的test.pcap会保存在file路径下:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> /file print where name ~ "test"
Columns: NAME, TYPE, SIZE, CREATION-TIME
#  NAME       TYPE        SIZE     CREATION-TIME
0  test.pcap  .pcap file  82.7KiB  jul/22/2023 16:21:47
[RokasYang@MikroTik] /tool/sniffer>

8)开启ftp服务传送pcap文件

当没有图形化界面,不方便从winbox取出文件时,临时使用ftp服务来传递文件:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> /ip service enable ftp

ftp服务开启后,使用ftp客户端将文件get到本地:

文件下载后,按需将ftp服务关闭即可:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> /ip service disable ftp

之后便能使用wireshark分析抓包文件了:

2.Tcpdump

以上大部分配置都可以沿用,然后设置如下几个参数,让ros把数据包传送给指定的Server,Server端再使用tcpdump来抓包保存。

1)edit file-name

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit file-name
[RokasYang@MikroTik] /tool/sniffer>

清空文件名,因为不需要保存到ros下,ctrl o 保存退出。

2)edit streaming-enabled

将streaming-enabled改成yes,ctrl o保存退出。

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit streaming-enabled
[RokasYang@MikroTik] /tool/sniffer>

3)edit streaming-server

写入server接收端的IP:PORT地址,ctrl o保存退出。

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> edit streaming-server
[RokasYang@MikroTik] /tool/sniffer>

4)Server端使用tcpdump

在server端开启一个tcpdump进程,抓取37008端口,写入到文件server.pcap:

代码语言:shell复制
tcpdump -i any -nn -s 0 port 37008 -v -w server.pcap

5)start

在ros上执行start开始抓包:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> start

server端可以实时看到抓包数量,ros也可以通过packet print interval=1来查看数据并且1s刷新一次:

6)stop

停止抓包:

代码语言:shell复制
[RokasYang@MikroTik] /tool/sniffer> stop

Server按ctrl c终止就行。

之后便可以看到server.pcap文件。

如果你不想把文件传送到windows使用wireshark来分析,那么命令行模式的termshark也是不错的选择:

可以清晰看到ros使用IPIP隧道来封装转发数据包给server端。

四、总结

RouterOS作为业内一款强大的软路由操作系统,对于各种专业网络协议的覆盖率,使它原生支持捕获报文,非常利于网络排障、路由排障、协议排障等,可谓专业级别的路由操作系统。

本文以捕获ICMP为示例,避免篇幅过长,其它过滤参数包括IP地址过滤、Mac地址过滤、端口过滤等没有一一展示,根据实际需求场景抓最有用的包,让网络排障事半功倍。

附带PDF版本:

RouterOS最全抓包指南:囊括图形化、命令行模式.pdf

0 人点赞