HTTP流量神器Goreplay核心源码详解

Goreplay是一款用于TCP/HTTP流量录制与重放的工具,采用Go语言编写。本文深入解析其核心源码,包括工程结构、主要流程,并探讨了流量丢失问题及其解决方案。文章还介绍了goreplay如何利用google/gopacket库进行抓包,以及配置和代码调用链路图。
摘要由CSDN通过智能技术生成

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

**摘要:**Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写。

本文分享自华为云社区《流量回放工具之 goreplay 核心源码分析》,作者:zuozewei。

一、前言

Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写。

Github地址:https://github.com/buger/goreplay

二、工程结构

这里以最新的 v1.3 版本为例,与 v1.0 的代码存在较大差异。

 ~/GoProjects/gor\_org/goreplay   release-1.3 ±✚  tree -L 1

.
├── COMM-LICENSE
├── Dockerfile
├── Dockerfile.dev
├── ELASTICSEARCH.md
├── LICENSE.txt
├── Makefile
├── Procfile
├── README.md
├── byteutils
├── capture
├── circle.yml
├── docs
├── elasticsearch.go
├── emitter.go 
├── emitter\_test.go
├── examples
├── go.mod
├── go.sum
├── gor.go 
├── gor\_stat.go
├── homebrew
├── http\_modifier.go
├── http\_modifier\_settings.go
├── http\_modifier\_settings\_test.go
├── http\_modifier\_test.go
├── http\_prettifier.go
├── http\_prettifier\_test.go
├── input\_dummy.go
├── input\_file.go
├── input\_file\_test.go
├── input\_http.go
├── input\_http\_test.go
├── input\_kafka.go
├── input\_kafka\_test.go
├── input\_raw.go
├── input\_raw\_test.go
├── input\_tcp.go
├── input\_tcp\_test.go
├── kafka.go
├── limiter.go
├── limiter\_test.go
├── middleware
├── middleware.go
├── middleware\_test.go
├── mkdocs.yml
├── output\_binary.go 
├── output\_dummy.go
├── output\_file.go
├── output\_file\_test.go
├── output\_http.go
├── output\_http\_test.go
├── output\_kafka.go
├── output\_kafka\_test.go
├── output\_null.go
├── output\_s3.go
├── output\_tcp.go
├── output\_tcp\_test.go
├── plugins.go 
├── plugins\_test.go
├── pro.go
├── proto
├── protocol.go
├── ring
├── s3
├── s3\_reader.go
├── s3\_test.go
├── settings.go 
├── settings\_test.go
├── sidenav.css
├── simpletime
├── site
├── size
├── snapcraft.yaml
├── tcp
├── tcp\_client.go
├── test\_input.go
├── test\_output.go
├── vendor
└── version.go

工程目录比较扁平,主要看 plugin.go,settings.go,emitter.go 几个主要文件,其它分 input_xxx ,output_xxx 都是适配具体协议的输入输出插件,程序入口是 gor.go 的 main 函数。

主要文件说明:

  • settings.go:实现对于启动命令参数的解析,决定其注册那些插件到 Plugin.Inputs,Plugin.Outputs两个列表里。
  • plugin.go:主要是所有输入输出插件的管理。
  • emitter.go:程序核心事件处理,实现对于 Plugin.Inputs 输入流的读取、判断是否需要进行 middlewear 的处理、http修改等,然后异步复制流量到所有 Plugin.outputs,同时将所有 Plugin.outputs 中有 response 的数据,复制到所有 outputs 中。
  • input_xxx.go:主要是输入的插件,实现 tcp/ht
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值