MySQL抓包工具:MySQL Sniffer
发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这两天看到群里发了一个开源软件,是关于MYSQL实时抓包的工具。顿时让我想到了之前做故障定位时的一些需求,之前针对连接数据库的连接信息进行审计定位,做过MYSQL自身的审计功能开启(有不少坑,慎用),
千家信息网最后更新 2024年11月28日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安全错误
数据库的锁怎样保障安全
上海联恩网络技术
网络安全与信息安全通识
1万ip网站 多大服务器
2019年网络技术考试时间
服务器程序无法关闭
华服互联网科技下午茶分享
软件开发文档举例
做金融软件开发的必备知识
mac数据库软件开发
学习网络技术用的搜题软件
服务器开机启动
上海光奈网络技术有限公司
怎么自己造一个服务器
iphone越狱软件开发
软件开发和网页设计
保定计算机网络技术学校
广西星门互联网科技有限公司电话
广州c语言软件开发靠谱吗
数据库迁移ppt
数据库生成快照
厦门电商系统软件开发
.数据库设计方式
服务器打开网页卡顿
网络安全竞赛叫什么
软件开发需求计划书
网络安全技能竞赛考什么
动力服务器
数据库解决数据依赖性问题
北海行业专业软件开发
青岛大型互联网科技公司