天天看点

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

最近在逛

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

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

[email protected]:~$ 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];
……

复制代码