goreplay 源代碼分析
goreplay 是一個(gè)不錯(cuò)流量重放測(cè)試工具就斤,支持流量的抓包唁毒、記錄、沖放等功能骡显,在通讀代碼之后疆栏,覺(jué)得雖然代碼水平不如大廠的優(yōu)美,但是不失是一個(gè)小巧而好用的個(gè)人工具惫谤,因此記錄筆記如下:
目錄結(jié)構(gòu)與初步分析
目錄比較扁平壁顶,主要看plugin.go \settings.go \emmit.go 幾個(gè)主要文件,其他input_xxx ,output_xxx 都是適配具體協(xié)議的輸入輸出插件溜歪。
settings.go 實(shí)現(xiàn)對(duì)于啟動(dòng)命令參數(shù)的解析博助,決定其注冊(cè)那些插件到 Plugin.Inputs Plugin.Outputs 兩個(gè)列表里
plugin.go 主要是所有輸入輸出插件的管理
emitter.go 程序核心事件處理實(shí)現(xiàn)對(duì)于Plugin.Inputs 輸入流的讀取、是否需要進(jìn)行middlewear的處理痹愚、http美化與修改富岳,之后異步copy流量到所有 Plugin.outputs蛔糯,同時(shí)將所有Plugin.outputs 中有response的數(shù)據(jù),復(fù)制到所有outputs中 (這一點(diǎn)沒(méi)讀明白窖式。蚁飒。還在費(fèi)解中)
input_xxx.go output_xxx.go 主要是輸入輸出的插件,實(shí)現(xiàn)tcp/http/raw/kafuka 等協(xié)議萝喘,
實(shí)現(xiàn)io.Reader io.Writer 接口淮逻,最后根據(jù)配置注冊(cè)到 Plugin.inputs Plugin.outputs 隊(duì)列里
主要核心流程
主要核心流程:
分析
整體工具小巧而實(shí)用,既可以實(shí)現(xiàn)rawsocket的抓包阁簸,也可以實(shí)現(xiàn)http的記錄爬早、沖放,也支持多實(shí)例之間的級(jí)聯(lián)启妹。但是有點(diǎn)缺點(diǎn):
- 輸出到文件不夠“結(jié)構(gòu)化“筛严,以emoji字符作為分割符
- 配置信息全靠啟動(dòng)命令參數(shù),比較冗長(zhǎng)
- input_tcp 與out_tcp 僅僅作為級(jí)聯(lián)使用饶米,無(wú)法通過(guò)配置實(shí)現(xiàn)tcp流量的mirror 桨啃,當(dāng)然這也不是作者原意,通過(guò)簡(jiǎn)單的修改也可以達(dá)到目的檬输。