使用go-sniffer監控mysql、redis執行命令

最近在逛 GitHub 的時候發現一個有趣的 go 項目 go-sniffer,是用來在開發環境監控 mysqlredis 執行命令的。mysql

Capture mysql,redis,http,mongodb etc protocol... 抓包截取項目中的數據庫請求並解析成相應的語句,如mysql協議會解析爲sql語句,便於 調試。 不要修改代碼,直接嗅探項目中的數據請求。linux

1、 安裝 GO 環境

參照官網 來安裝。git

下面以 Ubuntu 爲例來介紹一下。github

1. 下載 Go 1.11.2壓縮包

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

2. 解約文件

將文件解壓到 /usr/local 文件夾下面, 若是不是 root 用戶,須要在解壓命令前面加上 soduredis

tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz
複製代碼

3. 建立 GOPATH 目錄

GOPATH 是存放 Go 源代碼、包、生成的二進制文件的目錄,位置通常放在 $HMOE/go 下,咱們執行 mkdir ~/go 命令來建立這個目錄。sql

接着在 ~/go 目錄下面分別建立 src 目錄和 bin 目錄,bin 目錄也能夠不建立,它會在執行 go install 以後自動建立。mongodb

如今咱們的目錄結構以下:數據庫

go
├── bin
└── src
複製代碼

4. 添加環境變量

咱們須要把 /usr/local/go/bin~/go/bin 這兩個目錄加入環境變量中,來方便咱們執行命令。json

編輯 ~/.profile 文件,在文件的最後一行加上:

PATH="$HOME/go/bin:/usr/local/go/bin:$PATH"
複製代碼

保存退出。執行 source ~/.profile 來更新環境變量。

執行 go version ,能夠看到終端輸出: go version go1.11.2 linux/amd64 ,表明 go 安裝成功。

2、 使用 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];
……

複製代碼
相關文章
相關標籤/搜索