MySQL Sniffer

MySQL Sniffer 是360开源的一个基于 MySQL 协议的抓包工具, 能实时抓取客户端端请求,并格式化输出操作语句,操作十分简单。
对于问题的定位,操作的审核是个不错的利器。

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

安装

# yum install glib2-devel libpcap-devel libnet-devel
# unzip mysql-sniffer-master.zip
# cd mysql-sniffer-master
# cmake .

-- Configuring done
-- Generating done
-- Build files have been written to: /root/mysql-sniffer-master

# make

Scanning dependencies of target mysql-sniffer
[ 16%] Building C object bin/CMakeFiles/mysql-sniffer.dir/main.c.o
[ 33%] Building C object bin/CMakeFiles/mysql-sniffer.dir/mysql-dissector.c.o
/root/mysql-sniffer-master/src/mysql-dissector.c: In function ‘decode_mysql_lenenc_int’:
/root/mysql-sniffer-master/src/mysql-dissector.c:112: warning: dereferencing type-punned pointer will break strict-aliasing rules
[ 50%] Building C object bin/CMakeFiles/mysql-sniffer.dir/util.c.o
[ 66%] Building CXX object bin/CMakeFiles/mysql-sniffer.dir/session.cpp.o
[ 83%] Building CXX object bin/CMakeFiles/mysql-sniffer.dir/sniff-config.cpp.o
[100%] Building CXX object bin/CMakeFiles/mysql-sniffer.dir/sniff-log.cpp.o
Linking CXX executable mysql-sniffer
[100%] Built target mysql-sniffer

# cd bin/

# ls

CMakeFiles  cmake_install.cmake  Makefile  mysql-sniffer

参数说明

参数说明也是简明易懂。

# ./mysql-sniffer -help
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
         -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
         -l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout.
         -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
         -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

示例

# ./mysql-sniffer -i eth0 -p 3306

其中,倒数第二列是返回数据的行数。

2017-03-08 11:00:08     root     192.168.244.20     NULL              0ms              1     select @@version_comment limit 1
2017-03-08 11:00:08     root     192.168.244.20     NULL              0ms              1     select USER()
2017-03-08 11:00:10     root     192.168.244.20     NULL              0ms              1     select 1
2017-03-08 11:01:46     root     192.168.244.20     NULL              0ms              1     SELECT DATABASE()
2017-03-08 11:01:46     root     192.168.244.20     test             24ms              0     use test
2017-03-08 11:01:46     root     192.168.244.20     test            172ms             14     show databases
2017-03-08 11:01:46     root     192.168.244.20     test              0ms             20     show tables
2017-03-08 11:01:52     root     192.168.244.20     test              0ms             20     show tables
2017-03-08 11:01:57     root     192.168.244.20     test             58ms              9     select * from test1
2017-03-08 11:02:17     root     192.168.244.20     test              0ms              1     SELECT DATABASE()
2017-03-08 11:02:17     root     192.168.244.20     test              0ms              0     use test

注意

1. 只能抓取新建的链接,如果是之前创建的链接将获取不到用户名和库名,并有一定几率丢包。

2. 如果客户端是在本地,如果走的是tcp连接的话,如mysql -h 192.168.244.10 -uroot -p123456,其中192.168.244.10是本地主机ip,
    则只能通过回环地址来捕捉,./mysql-sniffer -i lo -p 3306

参考

https://github.com/Qihoo360/mysql-sniffer/blob/master/README_CN.md

时间: 2024-12-17 01:36:46

MySQL Sniffer的相关文章

0818基于360开源数据库流量审计MySQL Sniffer

开源数据库流量审计MySQL Sniffer 我最推崇的数据库安全产品就是基于流量的数据库审计,因为它不需要更改网络结构,并且也是最关键的是,不影响数据库服务器性能,不用苦口婆心的劝数据库管理员安装监控软件.它可以比较好的发现通过Web漏洞的拖库行为,以及基于数据库通讯协议的数据库管理过程中的违规行为.本质上基于流量的数据库审计就是一种特殊的流量审计,或者说针对数据库的IDS,如图10-11所示,通过从网络全流量中解析数据库协议,进一步还原成数据库常见的增删查改操作,然后在根据预定义的规则进行审

MySQL抓包工具:MySQL Sniffer 和性能优化

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

secilog 1.18 发布 增加了mysql审计,多个web报表等

日志分析软件 secilog 1.18发布,增加了mysql数据库审计,增加了多个web报表,对日志查询做了更多友好的新特性,上篇文章1.17,有兴趣可以了解一下.本次升级主要增加以下功能: 增加了mysql数据库审计 mysql的审计主要有几种方式,常用的是分析mysql的binlog功能,而binlog的分析一般不能实时分析,还有个问题就是binlog是二进制内容,需要借助第三方系统才可以分析.还有一种常用的方式是通过sniffer来分析mysql的请求,我们目前主要采用的是sniffer来

mysql监视器MONyog的使用

MONyog是个商业收费软件,但是可以找一下破解版,我用的是4.72破解版 1.       图1.1 在服务器设置中,如图1.1.在Sniffer Settings里Enable sniffing?选择YES开启Sniffer,然后再设置FilteringOptions .Long Running Query Options选项:在Long Running Query Options的Actionto be taken中可以选择通知.杀死.通知并杀死查询.如果选为kill,在查询超过预设的最大

记一次MySQL找回用户数据

事情经过 有天,我们公司外区的一个销售C说他8月3号以前的工作流记录找不到了.问清缘由,原来是更新了微信号(我们公司的工作流是基于企业微信开发的).经过分析,微信号和流程数据并没什么关系,所以初步得出结论:本来只需要更新微信号的,结果我们公司的流程系统管理员把用户先删除,再创建了新的用户. 解决过程 1.首先想到的是直接从定时备份数据里面找回原来的用户ID,结果发现系统只备份了十天的记录,而工作流系统上显示销售C只有8月3号以后的流程记录,距今已经40多天,从自动备份的数据里已经无法恢复. 2.

centos7下使用yum安装mysql

CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm 安装这个

EF+mvc+mysql

这个真是一个大坑啊.TM折腾了一下午终于弄好了.赶紧记录下来分享给大家,免得有和我一样一直配置不成功的又折腾半天-.1.安装MySQL for Visual Studio这个直接在mysql官网下载并安装就好了.不过这个必须是vs2013 professional版本以上才可以!!2.安装MySQL Connector/Net这个可以可以通过NuGet工具获得,比较轻松愉快,当然你也可以自己下载,自己引用.3.配置web.config.首先是connectionStrings节点 1 <conn

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

Centos6.5 zabbix3.2.6监控mysql

  一.     操作环境 我使用的linux系统是centos6.5,数据库是mysql5.6,apache2.4,php5,6 安装目录: /usr/local/apache /usr/local/php /usr/local/mysql /usr/local/zabbix Zabbix服务器插件安装 Zabbix3.2.6自带监控mysql模板监控项不全面,所以重新下载导入到zabbix里面 下载网址:. https://www.percona.com/downloads/percona-