最近在逛 GitHub
的時候發現一個有趣的 go
項目 go-sniffer,是用來在開發環境監控 mysql
和 redis
執行命令的。mysql
Capture mysql,redis,http,mongodb etc protocol... 抓包截取項目中的數據庫請求並解析成相應的語句,如mysql協議會解析爲sql語句,便於 調試。 不要修改代碼,直接嗅探項目中的數據請求。linux
GO
環境參照官網 來安裝。git
下面以 Ubuntu
爲例來介紹一下。github
Go
1.11.2壓縮包下載地址: dl.google.com/go/go1.11.2…golang
將文件解壓到 /usr/local
文件夾下面, 若是不是 root
用戶,須要在解壓命令前面加上 sodu
redis
tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz
複製代碼
GOPATH
目錄GOPATH
是存放 Go
源代碼、包、生成的二進制文件的目錄,位置通常放在 $HMOE/go
下,咱們執行 mkdir ~/go
命令來建立這個目錄。sql
接着在 ~/go
目錄下面分別建立 src
目錄和 bin
目錄,bin
目錄也能夠不建立,它會在執行 go install
以後自動建立。mongodb
如今咱們的目錄結構以下:數據庫
go
├── bin
└── src
複製代碼
咱們須要把 /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
安裝成功。
go-sniffer
libpcap-dev
Ubuntu
環境下須要先安裝 libpcap-dev
, 執行以下命令來安裝:
sudo apt-get install libpcap-dev
複製代碼
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
複製代碼
執行 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];
……
複製代碼