使用go-sniffer监控mysql、redis执行命令

栏目: 数据库 · 发布时间: 6年前

内容简介:最近在逛Capture mysql,redis,http,mongodb etc protocol... 抓包截取项目中的数据库请求并解析成相应的语句,如mysql协议会解析为sql语句,便于 调试。 不要修改代码,直接嗅探项目中的数据请求。参照官网 来安装。

最近在逛 GitHub 的时候发现一个有趣的 go 项目 go-sniffer ,是用来在开发环境监控 mysqlredis 执行命令的。

Capture mysql,redis,http,mongodb etc protocol... 抓包截取项目中的数据库请求并解析成相应的语句,如 mysql 协议会解析为 sql 语句,便于 调试。 不要修改代码,直接嗅探项目中的数据请求。

一、 安装 GO 环境

参照官网 来安装。

下面以 Ubuntu 为例来介绍一下。

1. 下载 Go 1.11.2压缩包

下载地址: dl.google.com/go/go1.11.2…

2. 解约文件

将文件解压到 /usr/local 文件夹下面, 如果不是 root 用户,需要在解压命令前面加上 sodu

tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz
复制代码

3. 创建 GOPATH 目录

GOPATH 是存放 Go 源代码、包、生成的二进制文件的目录,位置一般放在 $HMOE/go 下,我们执行 mkdir ~/go 命令来创建这个目录。

接着在 ~/go 目录下面分别创建 src 目录和 bin 目录, bin 目录也可以不创建,它会在执行 go install 之后自动创建。

现在我们的目录结构如下:

go
├── bin
└── src
复制代码

4. 添加环境变量

我们需要把 /usr/local/go/bin~/go/bin 这两个目录加入环境变量中,来方便我们执行命令。

编辑 ~/.profile 文件,在文件的最后一行加上:

PATH="$HOME/go/bin:/usr/local/go/bin:$PATH"
复制代码

保存退出。执行 source ~/.profile 来更新环境变量。

执行 go version ,可以看到终端输出: go version go1.11.2 linux/amd64 ,代表 go 安装成功。

二、 使用 go-sniffer

1. 安装 libpcap-dev

Ubuntu 环境下需要先安装 libpcap-dev , 执行如下命令来安装:

sudo apt-get install libpcap-dev
复制代码

2. 安装 go-sniffer

使用 go get 来下载

go get -v -u github.com/40t/go-sniffer

复制代码

由于需要从 GitHub 来下载,所以速度会有点慢,需要耐心等待一会

下载过程:

github.com/40t/go-sniffer (download)
github.com/google/gopacket (download)
github.com/google/gopacket
github.com/40t/go-sniffer/plugSrc/http/build
github.com/40t/go-sniffer/plugSrc/mongodb/build/internal/json
github.com/40t/go-sniffer/plugSrc/mongodb/build/bson
github.com/40t/go-sniffer/plugSrc/mongodb/build
github.com/40t/go-sniffer/plugSrc/mysql/build
github.com/40t/go-sniffer/plugSrc/redis/build
github.com/google/gopacket/layers
github.com/google/gopacket/pcap
github.com/google/gopacket/tcpassembly
github.com/google/gopacket/tcpassembly/tcpreader
github.com/40t/go-sniffer/core
github.com/40t/go-sniffer


复制代码

如果刚才已经把 ~/go/bin 加入环境变量,这个时候可以直接执行 go-sniffer 来验证一下。

当然我们也可以把 go-sniffer 拷贝到 /usr/local/bin ,执行如下命令:

sudo cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin
复制代码

3. 用法

执行 go-sniffer 可以看到输出了我们的设备名称,监听的时候需要这个设备名称

vagrant@homestead:~$ go-sniffer
==================================================================================
[Usage]

    go-sniffer [device] [plug] [plug's params(optional)]

    [exp]
          go-sniffer en0 redis          Capture redis packet
          go-sniffer en0 mysql -p 3306  Capture mysql packet

    go-sniffer --[commend]
               --help "this page"
               --env  "environment variable"
               --list "Plug-in list"
               --ver  "version"
               --dev  "device"
    [exp]
          go-sniffer --list "show all plug-in"

==================================================================================
[device] : lo :   127.0.0.1
[device] : enp0s3 : 08:00:27:19:2c:a4  10.0.2.15
[device] : enp0s8 : 08:00:27:1b:32:1c  192.168.10.10
==================================================================================


复制代码

在这里我需要监听本机的 mysql 请求,就是 127.0.0.1 ,也就是 lo 这个设备

那就使用如下命令来启动:

sudo go-sniffer lo mysql
复制代码

启动之后,就可以监控 MySQL 的请求了

我们随便来执行一个 PHP 脚本,就可以看到输出了我们脚本执行的 SQL

……
2018-11-29 04:11:04| ser -> cli |【Ok】 Effect Row:0
2018-11-29 04:11:04| cli -> ser |【Pretreatment】select * from `users` where `appid` = ? limit 1
2018-11-29 04:11:04| cli -> ser |Stm id[3]: 'select * from `users` where `appid` = ? limit 1';
set @p0 = '4s6rL2VIsTp6hIaGFvf9iZzk9uIkvLlIVk';
Execute stm id[3]:  using @p0;
Drop stm id[3];
……

复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效程序员的45个习惯

高效程序员的45个习惯

Venkat Subramaniam、Andy Hunt / 钱安川、郑柯 / 人民邮电出版社 / 2010-01 / 35.00元

“书中‘切身感受’的内容非常有价值——通过它我们可以做到学有所思,思有所悟,悟有所行。” ——Nathaniel T. Schutta,《Ajax基础教程》作者 “此书通过常理和经验,阐述了为什么你应该在项目中使用敏捷方法。最难得的是,这些行之有效的实战经验,竟然从一本书中得到了。” ——Matthew Johnson,软件工程师 十年来,软件行业发生了翻天覆地的变化。敏捷......一起来看看 《高效程序员的45个习惯》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试