【MySQL】go-sniffer SQL 网络抓取工具

简介

捕获mysql,redis,http,mongodb等协议,抓包截取项目中的数据库请求并解析成相应的语句,如修改mysql协议会解析为sql语句,即可调试。不要代码,直接嗅探项目中的数据请求。

有时候你想获取一些时间段的 SQL,但是是又不想开审计或其他原因,可以使用 go-sniffer 工具,从 tcp 数据包中解析 SQL。

项目地址:

https://github.com/40t/go-sniffer

支持列表:

设置:

  • 支持 :MacOS Linux Unix
  • 不支持:windows
  • 如果过程中遇到问题go get,请尝试升级go版本(如果go get过程中遇到问题,请尝试升级go版本)
  • ssl 加密无法获取 sql

安装

安装 go 和依赖

复制代码
yum -y install libpcap-devel go

安装 go-sniffer

复制代码
# 克隆代码到本地
git clone https://github.com/40t/go-sniffer.git

cd go-sniffer

# 初始化go模块
go mod init github.com/40t/go-sniffer

# 下载依赖
go mod tidy

# 编译项目
go build

# 测试
./go-sniffer --help

无法下载依赖时,可以配置国内的代理源

复制代码
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

可以直接将编译好的文件应用到其他机器,安装依赖即可使用。

用法

复制代码
=======================================================================
[使用说明]

    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
=======================================================================

示例

复制代码
# mysql
go-sniffer lo0 mysql 

# redis
go-sniffer en0 redis 

# http
go-sniffer eth0 http -p 8080

# mongodb
go-sniffer eth1 mongodb

测试

准备mysql 实例一台

创建库

复制代码
creaet database test;

创建数据库账号

复制代码
create user sniffer@'127.0.0.1' identified by '123';
grant all on *.* to sniffer@'127.0.0.1';

安装 sysbench

复制代码
yum install -y sysbench

生成测试数据

复制代码
sysbench \
--db-driver=mysql \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=sniffer \
--mysql-password=123 \
--mysql-db=test \
--tables=10 \
--table-size=1000 \
--report-interval=1 \
--threads=1000 \
--rand-type=uniform \
--time=120 \
--auto-inc=on \
/usr/share/sysbench/oltp_read_only.lua \
prepare

启动 go-sniffer 监听

复制代码
./go-sniffer lo mysql  # 注意网卡名称

运行

复制代码
sysbench --report-interval=5 \
--num-threads=100 \
--num-requests=0 \
--max-time=20 \
--mysql-user=sniffer \
--mysql-password='Passw0rd' \
--oltp-table-size=10000 \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-db=test \
--test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
run

即可查看到 sql 输出了

相关推荐
jiayou6419 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北21 小时前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
AI全栈实验室3 天前
MongoDB迁移金仓踩了5个坑,最后一个差点回滚
mongodb
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
花酒锄作田3 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker