MySQL抓包工具:MySQL Sniffer
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这两天看到群里发了一个开源软件,是关于MYSQL实时抓包的工具。顿时让我想到了之前做故障定位时的一些需求,之前针对连接数据库的连接信息进行审计定位,做过MYSQL自身的审计功能开启(有不少坑,慎用),
千家信息网最后更新 2025年01月20日MySQL抓包工具:MySQL Sniffer这两天看到群里发了一个开源软件,是关于MYSQL实时抓包的工具。顿时让我想到了之前做故障定位时的一些需求,之前针对连接数据库的连接信息进行审计定位,做过MYSQL自身的审计功能开启(有不少坑,慎用),也通过tcpdump做过一些分析(直接读分析日志比较难以看明白,在数据库连接abort值高时使用)。而实时的连接监控、分析,我们一般使用mysqladmin/show full processlist 命令查看,也可直接查询processlist表。但长时间监控连接数据库的应用IP、操作记录,目前没有什么特别好的工具,此工具让我眼前一亮,顿时有尝试试用看看的想法,它的名字就是:MySQL Sniffer。
MySQL Sniffer简介:(来自开源工具的readme)
MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端或 Client 端请求,并格式化输出。输出内容包括访问时间、访问用户、来源 IP、访问 Database、命令耗时、返回数据行数、执行语句等。有批量抓取多个端口,后台运行,日志分割等多种使用方式,操作便捷,输出友好。同时也适用抓取 Atlas 端的请求,Atlas 是奇虎开源的一款基于MySQL协议的数据中间层项目,项目地址:[https://github.com/Qihoo360/Atlas](https://github.com/Qihoo360/Atlas)。同类型工具还有vc-mysql-sniffer,以及 tshark 的 -e mysql.query 参数来解析 MySQL 协议。
MySQL Sniffer安装使用:
(1)安装环境
建议在 centos6.2 及以上编译安装,并用 root 运行
(2)依赖包
glib2.0、libpcap、libnet
(3)下载地址
https://github.com/Qihoo360/mysql-sniffer
git clone git@github.com:Qihoo360/mysql-sniffer.git
(4)安装过程
[root@virtual01 mysql_sniff]# unzip mysql-sniffer-master.zip
[root@virtual01 mysql_sniff]# cd mysql-sniffer-master
[root@virtual01 mysql-sniffer-master]# cmake ./
[root@virtual01 mysql-sniffer-master]# make -j 8
[root@virtual01 mysql-sniffer-master]# cd ../
[root@virtual01 mysql_sniff]# mv mysql-sniffer-master /usr/local/mysql_sniffer
[root@virtual01 mysql_sniff]# ln -s /usr/local/mysql_sniffer/bin/mysql-sniffer /usr/bin/
(5)命令参数
[root@cyou_virtual01 ~]# mysql-sniffer -h
Usage mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr
[-d] -i eth0 -r 3000-4000
-d daemon mode.(后台运行)
-s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday (多久分隔一次日志,分钟为单位,如果小于0,按天分隔)
-i interface. Default to eth0(指定监控网卡接口)
-p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307 (指定监听的端口,多端口用逗号分隔)
this option has no effect when -f is set.
-r port range, Don't use -r and -p at the same time (指定端口范围,例如 -r 2000-5000)
-l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout.(指定输出日志的目录,文件名义端口命名,例如3306.log,监听进程终止后输出到日志)
-e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded(指定错误日志输出路径)
-f filename. use pcap file instead capturing the network interface (用pcap代替监听)
-w white list. dont capture the port. Multiple ports should be splited by ','.(白名单,不监控的端口)
-t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation (超过查询长度,截断处理)
-n keeping tcp stream count, if not set, default is 65536. if active tcp count is larger than the specified count, mysql-sniffer will remove the oldest one(tcp流数量,默认65536)
(6)使用案例
1)实时抓取某端口信息并打印到屏幕
输出格式为:时间,访问用户,来源 IP,访问 Database,命令耗时,返回数据行数,执行语句。
[root@virtual01 ~]# mysql-sniffer -i eth0 -p 3306
2017-03-02 10:25:28 root 192.168.110.29 NULL 0ms 1 select @@version_comment limit 1
2017-03-02 10:25:45 root 192.168.110.29 NULL 2ms 1 select sysdate()
2017-03-02 10:26:05 root 192.168.110.29 NULL 0ms 0 commit
2017-03-02 10:26:21 root 192.168.110.29 NULL 0ms 8 show variables like '%char%'
2)实时抓取某端口信息并打印到文件
-l 指定日志输出路径,日志文件将以 port.log 命名。(监控进程停止后才会显示日志内容)
[root@virtual01 ~]# mysql-sniffer -i eth0 -p 3306 -l /tmp
[root@virtual01 ~]# ls -l /tmp/3306.log
-rw-r--r-- 1 root root 304 Mar 2 10:32 /tmp/3306.log
3)实时抓取多个端口信息并打印到文件
-l 指定日志输出路径,-p 指定需要抓取的端口列表逗号分割。日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -p 3306,3307,3310 -l /tmp
4)实时抓取多个连续递增的端口并打印到文件
-l 指定日志输出路径,-r 指定端口范围,日志文件将以各自 port.log 命名
mysql-sniffer -i eth0 -r 3306-3310 -l /tmp
5)实时抓取多个连续递增的端口同时过滤某几个端口,并打印到文件
-l 指定日志输出路径,-r 指定端口范围, -w 指定过滤端口列表逗号分割,日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -r 3306-3310 -w 3308,3309 -l /tmp
6)抓取某个端口以 daemon 模式运行,并打印到文件
-l 指定日志输出路径,-p 指定端口, -n 指定数据包个数,日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -p 3306 -l /tmp -d
7)抓取某个端口并截取指定长度的 SQL
-p 指定端口, -t 指定SQL长度,将输出 SQL的前n个字符(适用于 SQL 过长的场景)。
mysql-sniffer -i eth0 -p 3306 -t 100
MySQL Sniffer简介:(来自开源工具的readme)
MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端或 Client 端请求,并格式化输出。输出内容包括访问时间、访问用户、来源 IP、访问 Database、命令耗时、返回数据行数、执行语句等。有批量抓取多个端口,后台运行,日志分割等多种使用方式,操作便捷,输出友好。同时也适用抓取 Atlas 端的请求,Atlas 是奇虎开源的一款基于MySQL协议的数据中间层项目,项目地址:[https://github.com/Qihoo360/Atlas](https://github.com/Qihoo360/Atlas)。同类型工具还有vc-mysql-sniffer,以及 tshark 的 -e mysql.query 参数来解析 MySQL 协议。
MySQL Sniffer安装使用:
(1)安装环境
建议在 centos6.2 及以上编译安装,并用 root 运行
(2)依赖包
glib2.0、libpcap、libnet
(3)下载地址
https://github.com/Qihoo360/mysql-sniffer
git clone git@github.com:Qihoo360/mysql-sniffer.git
(4)安装过程
[root@virtual01 mysql_sniff]# unzip mysql-sniffer-master.zip
[root@virtual01 mysql_sniff]# cd mysql-sniffer-master
[root@virtual01 mysql-sniffer-master]# cmake ./
[root@virtual01 mysql-sniffer-master]# make -j 8
[root@virtual01 mysql-sniffer-master]# cd ../
[root@virtual01 mysql_sniff]# mv mysql-sniffer-master /usr/local/mysql_sniffer
[root@virtual01 mysql_sniff]# ln -s /usr/local/mysql_sniffer/bin/mysql-sniffer /usr/bin/
(5)命令参数
[root@cyou_virtual01 ~]# mysql-sniffer -h
Usage mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr
[-d] -i eth0 -r 3000-4000
-d daemon mode.(后台运行)
-s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday (多久分隔一次日志,分钟为单位,如果小于0,按天分隔)
-i interface. Default to eth0(指定监控网卡接口)
-p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307 (指定监听的端口,多端口用逗号分隔)
this option has no effect when -f is set.
-r port range, Don't use -r and -p at the same time (指定端口范围,例如 -r 2000-5000)
-l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout.(指定输出日志的目录,文件名义端口命名,例如3306.log,监听进程终止后输出到日志)
-e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded(指定错误日志输出路径)
-f filename. use pcap file instead capturing the network interface (用pcap代替监听)
-w white list. dont capture the port. Multiple ports should be splited by ','.(白名单,不监控的端口)
-t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation (超过查询长度,截断处理)
-n keeping tcp stream count, if not set, default is 65536. if active tcp count is larger than the specified count, mysql-sniffer will remove the oldest one(tcp流数量,默认65536)
(6)使用案例
1)实时抓取某端口信息并打印到屏幕
输出格式为:时间,访问用户,来源 IP,访问 Database,命令耗时,返回数据行数,执行语句。
[root@virtual01 ~]# mysql-sniffer -i eth0 -p 3306
2017-03-02 10:25:28 root 192.168.110.29 NULL 0ms 1 select @@version_comment limit 1
2017-03-02 10:25:45 root 192.168.110.29 NULL 2ms 1 select sysdate()
2017-03-02 10:26:05 root 192.168.110.29 NULL 0ms 0 commit
2017-03-02 10:26:21 root 192.168.110.29 NULL 0ms 8 show variables like '%char%'
2)实时抓取某端口信息并打印到文件
-l 指定日志输出路径,日志文件将以 port.log 命名。(监控进程停止后才会显示日志内容)
[root@virtual01 ~]# mysql-sniffer -i eth0 -p 3306 -l /tmp
[root@virtual01 ~]# ls -l /tmp/3306.log
-rw-r--r-- 1 root root 304 Mar 2 10:32 /tmp/3306.log
3)实时抓取多个端口信息并打印到文件
-l 指定日志输出路径,-p 指定需要抓取的端口列表逗号分割。日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -p 3306,3307,3310 -l /tmp
4)实时抓取多个连续递增的端口并打印到文件
-l 指定日志输出路径,-r 指定端口范围,日志文件将以各自 port.log 命名
mysql-sniffer -i eth0 -r 3306-3310 -l /tmp
5)实时抓取多个连续递增的端口同时过滤某几个端口,并打印到文件
-l 指定日志输出路径,-r 指定端口范围, -w 指定过滤端口列表逗号分割,日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -r 3306-3310 -w 3308,3309 -l /tmp
6)抓取某个端口以 daemon 模式运行,并打印到文件
-l 指定日志输出路径,-p 指定端口, -n 指定数据包个数,日志文件将以各自 port.log 命名。
mysql-sniffer -i eth0 -p 3306 -l /tmp -d
7)抓取某个端口并截取指定长度的 SQL
-p 指定端口, -t 指定SQL长度,将输出 SQL的前n个字符(适用于 SQL 过长的场景)。
mysql-sniffer -i eth0 -p 3306 -t 100
端口
日志
输出
文件
实时
数据
工具
路径
监控
信息
命令
多个
运行
数据库
范围
逗号
长度
分析
监听
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
报价模板软件开发
网络安全与维护技术
工业网络技术行业分析报告
从大学生视角谈网络安全论文
网络安全法制宣传周手抄报图片
清河县委网络安全委员会
阎良区软件开发推荐
胜天服务器在哪里
潍坊快消品管理软件开发
不动产登记中心网络安全
宝 中国 网络技术有限公司
vb 数据库保存
快递app软件开发公司
软件开发人员奖金 上海
网络安全舆情会议记录
杭州展会多媒体软件开发
ssh框架数据库
爱国科技与互联网
西安润宇互联网络科技有限公司
网络安全推广价值
网络安全绘本青少年
服务器管理器仪表盘怎么设置
网络安全法27条律师
无视DDos攻击两个服务器
号码数据库类型
金山区无线网络技术优势
国家网络安全应急预案
ptr服务器怎么申请
锐捷云课堂服务器系统安装
测试过程中数据库问题报文没问题