一、簡介:
go-sniffer 可以抓包截取項目(MySQL、Redis、MongoDB)中的請求並解析成相應的語句,並格式化輸出。類似於在之前的文章 MySQL抓包工具:MySQL Sniffer。
二、下載:
github 地址:https://github.com/40t/go-sniffer
三、安裝:
1.安裝依賴包 Centos: yum -y install libpcap-devel Ubuntu: apt-get install libpcap-dev 另外還需要安裝golang,並且版本需要在1.10.3以上: wget https://golang.org/dl/go1.10.3.linux-amd64.tar.gz yum install golang 設置好相關的環境變量。如果不想要go環境 ,則可以直接在其他地方安裝好go-sniffer之后,復制到目標服務器上直接使用。 2.下載安裝 go get -v -u github.com/40t/go-sniffer cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin --安裝到設置好的go環境變量的目錄里 go-sniffer
四、參數說明: go-sniffer --help
go-sniffer [設備名] [插件名] [插件參數(可選)] [例子] go-sniffer en0 redis 抓取redis數據包 go-sniffer en0 mysql -p 3306 抓取mysql數據包,端口3306 go-sniffer --[命令] --help 幫助信息 --env 環境變量 --list 插件列表 --ver 版本信息 --dev 設備列表 [例子] go-sniffer --list 查看可抓取的協議 ======================================================================= [設備名] : lo0 : 127.0.0.1 [設備名] : en0 : x:x:x:x:x5:x 192.168.1.3 [設備名] : utun2 : 1.1.11.1 =======================================================================
五、語法:
$ go-sniffer eth0 mysql $ go-sniffer eth0 redis $ go-sniffer eth0 http -p 8080 $ go-sniffer eth1 mongodb
六、使用場景
1.Redis :審計、發現熱點key go-sniffer eth0 redis -p 6379 >> out.log 2.對端口為6379的Redis服務進行抓包,並把信息寫到文件中。該文件的日志格式: tcp and port 6379 get abc get abc get abc get abc get opq get opq get opq get opq get xyz get xyz get xyz 可以看到,該文件的信息就是操作日志,最后可以通過使用awk來分析,也可以把該日志文件寫入到數據庫的表里進行統計分析: # grep -avEi "^#|^$|^tcp|^ INFO|^ AUTH|^ REPLCONF ACK|^ CONFIG GET" out.txt |awk '{print $1,$2}'|sort| uniq -c | sort -nr |head -n 10 5 get abc 4 get opq 3 get xyz 注意:go-sniffer也需要消耗一定的資源,大致的消耗可以看以下表格: OPS Redis CPU sniffer CPU 1.2W 20% 30% 5.5W 80% 140% 7.5W 98% 180% 從上面看到,go-sniffer所需要的CPU資源是Redis的2倍左右。所以,在使用該工具之前,先判斷本身服務器的資源是否夠用。 3.mysql:審計 go-sniffer eth0 mysql -p 3306 >> out.log 4.mognodb:審計 go-sniffer eth0 mongodb -p 27017 >> out.log