MySQL、Redis、MongoDB网络抓包工具
简介
go-sniffer 可以抓包截取项目(MySQL、Redis、MongoDB)中的请求并解析成相应的语句,并格式化输出。类似于在之前的文章 MySQL抓包工具:MySQL Sniffer【转】中介绍的mysql-sniffer。而 go-sniffer 可以对更多数据库进行抓包分析,现在来介绍在什么情况下会使用该工具的。
使用
下载:
github 地址:https://github.com/40t/go-sniffer
安装:
1)安装依赖包:
Centos:
yum -y install libpcap-devel
Ubuntu:
apt-get install libpcap-dev
另外还需要安装golang,并且版本需要在1.10.3以上。
wget https://golang.org/dl/go1.10.3.linux-amd64.tar.gz
设置好相关的环境变量。如果不想要go环境 ,则可以直接在其他地方安装好go-sniffer之后,复制到目标服务器上直接使用。
2)下载安装
-- 安装好go环境的服务器上: go get -v -u github.com/40t/go-sniffer cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin --安装到设置好的go环境变量的目录里 go-sniffer
参数说明: go-sniffer --help
======================================================================= [使用说明] go-sniffer [设备名] [插件名] [插件参数(可选)] [例子] go-sniffer en0 redis 抓取redis数据包 go-sniffer en0 mysql -p 3306 抓取mysql数据包,端口3306 go-sniffer --[命令] --help 帮助信息 --env 环境变量 --list 插件列表 --ver 版本信息 --dev 设备列表 [例子] go-sniffer --list 查看可抓取的协议 ======================================================================= [设备名] : lo0 : 127.0.0.1 [设备名] : en0 : x:x:x:x:x5:x 192.168.1.3 [设备名] : utun2 : 1.1.11.1 =======================================================================
语法:
$ go-sniffer lo0 mysql $ go-sniffer en0 redis $ go-sniffer eth0 http -p 8080 $ go-sniffer eth1 mongodb
使用场景
一 Redis :审计、发现热点key
关于Redis的知识点就不说了,主要来说明如何使用go-sniffer来抓包分析。如果想发现哪个key的操作比较多或则是否存在热点key,在Redis4.0之前没有什么好办法(4.0之后的LFU可以查看hotkey),只有通过统计各个客户端发来的命令进行统计。虽然monitor可以看到某一刻的key操作,但是该命令消耗巨大,可能会造成客户端缓冲区溢出。并且也没有合适的插件来进行实现。即使有的话,对Redis的性能肯定有一定的损耗,所以只有监控其网络来分析操作是对Redis服务的影响最小的。如对一个实例进行监控:
go-sniffer eth0 redis -p 6379 >> out.log
对通过eth0网卡的客户端访问端口为6379的Redis服务进行抓包,并把信息写到文件中。该文件的日志格式:
tcp and port 6379 get abc get abc get abc get abc get opq get opq get opq get opq get xyz get xyz get xyz
可以看到,该文件的信息就是操作日志,最后可以通过使用awk来分析,也可以把该日志文件写入到数据库的表里进行统计分析:
# grep -avEi "^#|^$|^tcp|^ INFO|^ AUTH|^ REPLCONF ACK|^ CONFIG GET" out.txt |awk '{print $1,$2}'|sort| uniq -c | sort -nr |head -n 10 5 get abc 4 get opq 3 get xyz
注意:go-sniffer也需要消耗一定的资源,大致的消耗可以看以下表格:
OPS | Redis CPU | sniffer CPU |
1.2W | 20% | 30% |
5.5W | 80% | 140% |
7.5W | 98% | 180% |
从上面看到,go-sniffer所需要的CPU资源是Redis的2倍左右。所以,在使用该工具之前,先判断本身服务器的资源是否够用。
二 MySQL:审计
go-sniffer eth0 mysql -p 3306 >> out.log
三 MongoDB:审计
go-sniffer eth0 mongodb -p 27017 >> out.log
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2016-09-27 mysqldump和xtrabackup备份原理实现说明