使用go-sniffer監控mysql、redis執行命令
最近在逛GitHub
的時候發現一個有趣的go
專案ofollow,noindex">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 redisCapture redis packet go-sniffer en0 mysql -p 3306Capture 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:a410.0.2.15 [device] : enp0s8 : 08:00:27:1b:32:1c192.168.10.10 ================================================================================== 複製程式碼
在這裡我需要監聽本機的mysql
請求,就是127.0.0.1
,也就是lo
這個裝置
那就使用如下命令來啟動:
sudo go-sniffer lo mysql 複製程式碼
啟動之後,就可以監控SQL/">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]; …… 複製程式碼