最新消息:

MySQL抓包工具:MySQL Sniffer

mysql admin 3浏览

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 (点击文章末尾 “阅读原文” 跳转)。

建议在 centos6.2 及以上编译安装,并用 root 运行。

工具参数:

  1. ./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 isset.
  9. –r port range,Don‘t use -r and -p at the same time
  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 recorded
  12. -f filename. use pcap file instead capturing the network interface
  13. -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
  15. –n keeping tcp stream count,ifnotset,defaultis65536.if active tcp count is larger than the specified count, mysql–sniffer will remove the oldest one

示例

1. 实时抓取某端口信息并打印到屏幕

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

  1. mysql–sniffer –i eth0 –p 3306
  2. 2017–02–2314:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select@@version_comment limit 1
  3. 2017–02–2314:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select USER()
  4. 2017–02–2314:47:48 testuser 10.xx.xx.xx NULL 0ms 13 show databases
  5. 2017–02–2314:47:51 testuser 10.xx.xx.xx NULL 0ms 1 SELECT DATABASE()
  6. 2017–02–2314:47:51 testuser 10.xx.xx.xx mysql 0ms 0 use mysql
  7. 2017–02–2314:47:53 testuser 10.xx.xx.xx mysql 0ms 29 show tables
  8. 2017–02–2314:47:54 testuser 10.xx.xx.xx mysql 0ms 1 select1
  9. 2017–02–2314:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1
  10. 2017–02–2314:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1

2. 实时抓取某端口信息并打印到文件

-l 指定日志输出路径,日志文件将以 port.log 命名。

  1. mysql–sniffer –i eth0 –p 3306–l /tmp

3. 实时抓取多个端口信息并打印到文件

-l 指定日志输出路径,-p 指定需要抓取的端口列表逗号分割。日志文件将以各自 port.log 命名。

  1. mysql–sniffer –i eth0 –p 3306,3307,3310–l /tmp

4. 实时抓取多个连续递增的端口并打印到文件

-l 指定日志输出路径,-r 指定端口范围,日志文件将以各自 port.log 命名。

  1. //抓取端口包括(3306,3307,3308,3309,3310)
  2. mysql–sniffer –i eth0 –r 3306–3310–l /tmp

5. 实时抓取多个连续递增的端口同时过滤某几个端口,并打印到文件

-l 指定日志输出路径,-r 指定端口范围, -w 指定过滤端口列表逗号分割,日志文件将以各自 port.log 命名。

  1. //抓取端口包括(3306,3307,3310)
  2. mysql–sniffer –i eth0 –r 3306–3310 –w 3308,3309–l /tmp

6. 抓取某个端口以 daemon 模式运行,并打印到文件

-l 指定日志输出路径,-p 指定端口, -n 指定数据包个数,日志文件将以各自 port.log 命名。

  1. mysql–sniffer –i eth0 –p 3306 –l /tmp –d

7. 抓取某个端口并截取指定长度的 SQL

-p 指定端口, -t 指定SQL长度,将输出 SQL的前n个字符(适用于 SQL 过长的场景)。

  1. mysql–sniffer –i eth0 –p 3306 –t 100

相关文章

转载请注明:爱开源 » MySQL抓包工具:MySQL Sniffer

转载请注明:爱开源 » MySQL抓包工具:MySQL Sniffer