MySQL抓包工具:MySQL Sniffer
发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,这两天看到群里发了一个开源软件,是关于MYSQL实时抓包的工具。顿时让我想到了之前做故障定位时的一些需求,之前针对连接数据库的连接信息进行审计定位,做过MYSQL自身的审计功能开启(有不少坑,慎用),
千家信息网最后更新 2024年11月12日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安全错误
数据库的锁怎样保障安全
网络安全与管理教材
上海晨奚互联网科技
刚开服服务器炸了
腾讯直播 软件开发
宠物管理系统数据库
网络安全数据建模
ps4合金装备服务器黑屏
新乡良木网络技术有限公司
ntp服务器的16进制掩码
protege数据库导入
如何利用数据库输出报表
河南视频会议软件开发
张湾区互联网软件开发包括哪些
南京打造智慧小区软件开发
软件开发项目资源计划表
软件开发的四个基本策略
南通龙鼎网络技术公司
支持网络技术工程师岗位职责
微信商城服务器租赁
256g服务器多少钱
谛听网络技术有限公司黑卡
软件开发笔试查手机
功能最强大的数据库是什么
自考计算机网络技术2018
服务器未认证继续进行安全连接
个人征信信息数据库数据更新频率
电脑打印机服务器笔记本回收
网络技术运营兼职协议
网络安全隐患排查整治讲话
南京聚铭网络安全标准化