MySQL抓包工具

来源:互联网 发布:淘宝试用中心怎么进 编辑:程序博客网 时间:2024/05/21 14:08

本文来自:https://github.com/Qihoo360/MySQL-sniffer

简介

      mysql Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出。输出内容包访问括时间、访问用户、来源 IP、访问 Database、命令耗时、返回数据行数、执行语句等。有批量抓取多个端口,后台运行,日志分割等多种使用方式,操作便捷,输出友好。同时也适用抓取 Atlas 端的请求,Atlas 是奇虎开源的一款基于MySQL协议的数据中间层项目,项目地址:https://github.com/Qihoo360/Atlas,同类型工具还有vc-mysql-sniffer,以及 tshark 的 -e mysql.query 参数来解析 MySQL 协议。

使用

下载:github 地址:https://github.com/Qihoo360/mysql-sniffer

安装:

1)安装依赖包:

Centos

yum install cmakeyum install  libpcap-develyum install  glib2-develyum install  libnet-devel

Ubuntu:

apt-get install cmakeapt-get install libpcap-devapt-get install glib2.0-devapt-get install libnet-devapt-get install build-essential

2)下载安装

git clone https://github.com/Qihoo360/mysql-sniffer.gitcd mysql-sniffermkdir projcd projcmake ../make在bin目录下面生成了:mysql-sniffer

若在ubuntu安装的时候报错:

/usr/include/glib-2.0/glib/gtypes.h:32:24: fatal error: glibconfig.h: No such file or directory

则需要:

cp /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h /usr/include/glib-2.0/

参数说明:

 1 root@db-test2:~# mysql-sniffer -h 2 Usage mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr 3          [-d] -i eth0 -r 3000-4000 4          -d daemon mode. # 5          -s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday 6          -i interface. Default to eth0 #网卡名 7          -p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307 8             this option has no effect when -f is set. #端口,多个端口,分割,不能和-f一起使用 9          -r port range, Don't use -r and -p at the same time  #端口范围,不能和-p一起使用10          -l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout. #输出打印到文件11          -e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded12          -f filename. use pcap file instead capturing the network interface13          -w white list. dont capture the port. Multiple ports should be splited by ','.#排除的端口14          -t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation #截取制定长度的SQL15          -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 #指定数据包个数

示例

输出格式:时间,访问用户,来源 IP,访问 Database,命令耗时,返回数据行数,执行语句。

1. 实时抓取某端口信息并打印到屏幕:-i 指定网卡名,-p 指定抓取的端口

[root@localhost ~]# mysql-sniffer -i enp3s0 -p 33062017-03-03 16:27:56     zhoujy     192.168.200.64     NULL            0ms              1     select @@version_comment limit 12017-03-03 16:27:56     zhoujy     192.168.200.64     NULL            0ms              1     select USER()2017-03-03 16:28:00     zhoujy     192.168.200.64     NULL            0ms              1     SELECT DATABASE()2017-03-03 16:28:00     zhoujy     192.168.200.64     xx              0ms              0     use xx2017-03-03 16:28:03     zhoujy     192.168.200.64     xx              0ms              8     select * from xx2017-03-03 16:28:13     zhoujy     192.168.200.64     xx              0ms              3     select user,host from mysql.user2017-03-03 16:28:24     zhoujy     192.168.200.64     xx              0ms              2     show grants for root@localhost2017-03-03 16:28:33     zhoujy     192.168.200.64     xx             18ms              1     select now()2017-03-03 16:28:41     zhoujy     192.168.200.64     xx             32ms              1     select 1+1

2. 实时抓取某端口信息并打印到文件:-l 指定日志输出路径,日志文件将以 port.log 命名。

[root@localhost ~]# mysql-sniffer -i enp3s0 -p 3306 -l /tmp/

3. 实时抓取多个端口信息并打印到文件:-l 指定日志输出路径,-p指定需要抓取的端口列表逗号分割,日志文件将以各自 port.log 命名。

[root@localhost ~]# mysql-sniffer -i enp3s0 -p 3306,3307,3307 -l /tmp/

4. 实时抓取多个连续递增的端口并打印到文件:-l 指定日志输出路径,-r 指定端口范围,日志文件将以各自 port.log 命名。

[root@localhost ~]# mysql-sniffer -i enp3s0 -r 3306-3309 -l /tmp/

5. 实时抓取多个连续递增的端口同时过滤某几个端口,并打印到文件:-l 指定日志输出路径,-r 指定端口范围,-w 指定过滤端口列表逗号分割,日志文件将以各自 port.log 命名。

[root@localhost ~]# mysql-sniffer -i enp3s0 -r 3306-3311 -w 3307,3309 -l /tmp/  

6. 抓取某个端口以 daemon 模式运行(-d),并打印到文件:-l 指定日志输出路径,-p 指定端口,-n 指定数据包个数,日志文件将以各自 port.log 命名。

[root@localhost tmp]# mysql-sniffer -i enp3s0 -p 3306 -l /tmp/ -d

7. 抓取某个端口并截取指定长度的 SQL:-p 指定端口, -t 指定SQL长度,将输出 SQL的前n个字符(适用于 SQL 过长的场景)。

[root@localhost ~]# mysql-sniffer -i enp3s0 -p 3306 -t 102017-03-03 17:05:49     zhoujy     192.168.200.64     NULL              0ms              1     select @@v...2017-03-03 17:05:49     zhoujy     192.168.200.64     NULL              0ms              1     select USE...2017-03-03 17:05:50     zhoujy     192.168.200.64     NULL              0ms              1     select 111...

总结

      通过上面的示例,看到mysql-sniffer工具通过指定的端口监控mysql,把所有的命里打印出来。看着和MySQL自己的general_log看似差不多,不过该工具已经按照需要的输出格式更好方便的查看,重要的还可以查看SQL范围的行数,可能在排查故障的时候用得到,先mark一下。

 

参考文档

MySQL抓包工具:MySQL Sniffer

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东退货已取走后悔了怎么办 退差价把下单立返红包退还了怎么办 苏宁电器发票丢了换电器怎么办 苹果5s访问限制密码忘了怎么办 京东买的暴风电视出现问题了怎么办 控水一个月的三角梅还没开花怎么办 帮别人办手机分期不还怎么办 国美在线没有信用卡分期不了怎么办 手机店办理分期被老板套现了怎么办 美的空调保修卡丢了怎么办 格力空调保修卡丢了怎么办 荣耀9i手机总是滑手怎么办? 春兰空调没发票不给修怎么办 洗衣机顶盖的安全开关坏了怎么办 苹果手机的开关健坏了怎么办 淘宝买的东西快递弄破损了怎么办 京东购买邮来手机里面没有怎么办 孕期建卡病历本丢了怎么办 四维检查胎儿心脏有缺陷怎么办 七个月的宝宝俩个蛋蛋都疝气怎么办 电脑有些网站看视频不能全屏怎么办 小米滑板车坏了售后不保修怎么办 红米4a电池不耐用怎么办 华为手机买个别人退货的怎么办 京东购物怎么查订单查询不到怎么办 退款了又收到货怎么办快递打电话 快递未收到货能退款商家拒绝怎么办 黑色牛仔裤有一块洗白了怎么办 黑色牛仔裤被洗衣液烧了怎么办 在蘑菇街退鞋子商家非说脏了怎么办 牛皮屑怎么办ke靠成都银康 微信订阅号取消关注之后还在怎么办 腾讯新闻红包领取说帐号异常怎么办 计算机职弥报名没选模块怎么办 有人用我手机注册有赞了怎么办 一件代发别人的货被投诉了怎么办 淘宝极速退款后商家拒收快递怎么办 运费险退到天猫垫付账户了怎么办 淘宝卖家食品有问题该怎么办 美团外卖不要辣椒给放了怎么办 旺旺卖家拒收我的消息怎么办