最近在逛 GitHub
的时候发现一个有趣的 go
项目 go-sniffer,是用来在开发环境监控 mysql
和 redis
执行命令的。
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];
……
复制代码