工具|MySQL、Redis、MongoDB網(wǎng)絡(luò)抓包工具
簡(jiǎn)介
go-sniffer?可以抓包截取項(xiàng)目(MySQL、Redis、MongoDB)中的請(qǐng)求并解析成相應(yīng)的語(yǔ)句,并格式化輸出。類(lèi)似于在之前的文章 MySQL抓包工具:MySQL Sniffer中介紹的mysql-sniffer。而 go-sniffer 可以對(duì)更多數(shù)據(jù)庫(kù)進(jìn)行抓包分析,現(xiàn)在來(lái)介紹在什么情況下會(huì)使用該工具的。
使用
下載:
github 地址:https://github.com/40t/go-sniffer
安裝:
安裝依賴(lài)包:
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
設(shè)置好相關(guān)的環(huán)境變量。如果不想要go環(huán)境 ,則可以直接在其他地方安裝好go-sniffer之后,復(fù)制到目標(biāo)服務(wù)器上直接使用。
下載安裝
-- 安裝好go環(huán)境的服務(wù)器上:
go get -v -u github.com/40t/go-sniffer cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin
--安裝到設(shè)置好的go環(huán)境變量的目錄里 go-sniffer
參數(shù)說(shuō)明:go-sniffer --help
[使用說(shuō)明]
????go-sniffer?[設(shè)備名]?[插件名]?[插件參數(shù)(可選)]
????[例子]
??????????go-sniffer?en0?redis??????????抓取redis數(shù)據(jù)包
??????????go-sniffer?en0?mysql?-p?3306??抓取mysql數(shù)據(jù)包,端口3306
????go-sniffer?--[命令]
???????????????--help?幫助信息
???????????????--env??環(huán)境變量
???????????????--list?插件列表
???????????????--ver??版本信息
???????????????--dev??設(shè)備列表
????[例子]
??????????go-sniffer?--list?查看可抓取的協(xié)議
=======================================================================
[設(shè)備名]?:?lo0?:???127.0.0.1
[設(shè)備名]?:?en0?:?x:x:x:x:x5:x??192.168.1.3
[設(shè)備名]?:?utun2?:???1.1.11.1
語(yǔ)法:
$?go-sniffer?lo0?mysql?
$?go-sniffer?en0?redis?
$?go-sniffer?eth0?http?-p?8080
$?go-sniffer?eth1?mongodb使用場(chǎng)景
一 Redis :審計(jì)、發(fā)現(xiàn)熱點(diǎn)key
關(guān)于Redis的知識(shí)點(diǎn)就不說(shuō)了,主要來(lái)說(shuō)明如何使用go-sniffer來(lái)抓包分析。如果想發(fā)現(xiàn)哪個(gè)key的操作比較多或則是否存在熱點(diǎn)key,在Redis4.0之前沒(méi)有什么好辦法(4.0之后的LFU可以查看hotkey),只有通過(guò)統(tǒng)計(jì)各個(gè)客戶(hù)端發(fā)來(lái)的命令進(jìn)行統(tǒng)計(jì)。雖然monitor可以看到某一刻的key操作,但是該命令消耗巨大,可能會(huì)造成客戶(hù)端緩沖區(qū)溢出。并且也沒(méi)有合適的插件來(lái)進(jìn)行實(shí)現(xiàn)。即使有的話(huà),對(duì)Redis的性能肯定有一定的損耗,所以只有監(jiān)控其網(wǎng)絡(luò)來(lái)分析操作是對(duì)Redis服務(wù)的影響最小的。如對(duì)一個(gè)實(shí)例進(jìn)行監(jiān)控:
go-sniffer eth0 redis -p 6379 >> out.log 對(duì)通過(guò)eth0網(wǎng)卡的客戶(hù)端訪問(wèn)端口為6379的Redis服務(wù)進(jìn)行抓包,并把信息寫(xiě)到文件中。該文件的日志格式:
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
可以看到,該文件的信息就是操作日志,最后可以通過(guò)使用awk來(lái)分析,也可以把該日志文件寫(xiě)入到數(shù)據(jù)庫(kù)的表里進(jìn)行統(tǒng)計(jì)分析:
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倍左右。所以,在使用該工具之前,先判斷本身服務(wù)器的資源是否夠用。
二 MySQL:審計(jì)
go-sniffer eth0 mysql -p 3306 >> out.log
三 MongoDB:審計(jì)
go-sniffer eth0 mongodb -p 27017 >> out.log
??
? 來(lái)源:https://www.cnblogs.com/zhoujinyi/p/15343188.html
END
推薦閱讀 一鍵生成Springboot & Vue項(xiàng)目!【畢設(shè)神器】
Java可視化編程工具系列(一)
Java可視化編程工具系列(二)
順便給大家推薦一個(gè)GitHub項(xiàng)目,這個(gè) GitHub 整理了上千本常用技術(shù)PDF,絕大部分核心的技術(shù)書(shū)籍都可以在這里找到,
GitHub地址:https://github.com/javadevbooks/books
Gitee地址:https://gitee.com/javadevbooks/books
電子書(shū)已經(jīng)更新好了,你們需要的可以自行下載了,記得點(diǎn)一個(gè)star,持續(xù)更新中..

