一、前言
在网络分析和监测工具中,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状态:
之后可以点击右侧的Packets、Connections、Hosts、Protocols,分别实时查看数据包、连接、主机、协议等具体分类:
抓完后点击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版本: