teaproxy

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 1, 2020 License: MIT, MIT Imports: 50 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TCPClientMaxAttempts = 3   // 失败最多尝试次数
	TCPClientStreamSize  = 128 // 读取客户端数据的队列长度
)

Variables

View Source
var ErrFTPTooManyConnections = errors.New("ftp: too many connections")
View Source
var HOSTNAME, _ = os.Hostname()

环境变量

View Source
var QPS = int32(0)

对外可读取的QPS

View Source
var ShareStaticDelivery = NewStaticDelivery()

公用的静态文件分发器

View Source
var SharedFTPClientPool = NewFTPClientPool()

FTP客户端池单例

View Source
var SharedHTTPClientPool = NewHTTPClientPool()

HTTP客户端池单例

View Source
var SharedManager = NewManager()

共享的管理对象

View Source
var SharedTunnelManager = NewTunnelManager()

Functions

func AddRequestHook

func AddRequestHook(hook *RequestHook)

添加Hook

func CallRequestAfterHook

func CallRequestAfterHook(req *Request, writer *ResponseWriter) (goNext bool)

执行After Hook

func CallRequestBeforeHook

func CallRequestBeforeHook(req *Request, writer *ResponseWriter) (goNext bool)

执行Before Hook

func CleanPath

func CleanPath(path string) string

清理Path中的多余的字符

Types

type EmptyResponseWriter

type EmptyResponseWriter struct {
	// contains filtered or unexported fields
}

空的响应Writer

func NewEmptyResponseWriter

func NewEmptyResponseWriter() *EmptyResponseWriter

func (*EmptyResponseWriter) Header

func (this *EmptyResponseWriter) Header() http.Header

func (*EmptyResponseWriter) Write

func (this *EmptyResponseWriter) Write([]byte) (int, error)

func (*EmptyResponseWriter) WriteHeader

func (this *EmptyResponseWriter) WriteHeader(statusCode int)

type FTPClient

type FTPClient struct {
	// contains filtered or unexported fields
}

FTP客户端

func (*FTPClient) Close

func (this *FTPClient) Close() error

关闭客户端

func (*FTPClient) Do

func (this *FTPClient) Do(req *http.Request) (*http.Response, error)

执行请求

type FTPClientPool

type FTPClientPool struct {
	// contains filtered or unexported fields
}

FTP客户端Pool

func NewFTPClientPool

func NewFTPClientPool() *FTPClientPool

获取新的客户端Pool

type FTPConnectionPool

type FTPConnectionPool struct {
	// contains filtered or unexported fields
}

FTP连接池

func (*FTPConnectionPool) Close

func (this *FTPConnectionPool) Close(client *ftp.ServerConn) error

关闭连接

func (*FTPConnectionPool) CloseAll

func (this *FTPConnectionPool) CloseAll() error

关闭所有连接

func (*FTPConnectionPool) Decrease

func (this *FTPConnectionPool) Decrease()

减少连接数量

func (*FTPConnectionPool) Get

func (this *FTPConnectionPool) Get() (*ftp.ServerConn, error)

获取新的连接

func (*FTPConnectionPool) Increase

func (this *FTPConnectionPool) Increase()

增加连接数量

func (*FTPConnectionPool) Put

func (this *FTPConnectionPool) Put(client *ftp.ServerConn)

复用连接

type FTPResponseBody

type FTPResponseBody struct {
	io.ReadCloser
	// contains filtered or unexported fields
}

FTP响应内容

func (*FTPResponseBody) Close

func (this *FTPResponseBody) Close() error

关闭

type ForwardProxy

type ForwardProxy struct {
	// contains filtered or unexported fields
}

type HTTPClientPool

type HTTPClientPool struct {
	// contains filtered or unexported fields
}

客户端池

func NewHTTPClientPool

func NewHTTPClientPool() *HTTPClientPool

获取新对象

type HTTPServeMux

type HTTPServeMux struct {
	http.ServeMux
}

自定义ServeMux

func (*HTTPServeMux) ServeHTTP

func (this *HTTPServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request)

type Listener

type Listener struct {
	IsChanged bool // 标记是否改变,用来在其他地方重启改变的监听器

	Scheme  Scheme // http, https, tcp, tcp+tls
	Address string
	Error   error
	// contains filtered or unexported fields
}

代理服务监听器

func NewListener

func NewListener() *Listener

获取新对象

func (*Listener) ApplyServer

func (this *Listener) ApplyServer(server *teaconfigs.ServerConfig)

应用配置

func (*Listener) CloseTCPClient

func (this *Listener) CloseTCPClient(lAddr string) error

关闭某个TCP连接

func (*Listener) HasServer

func (this *Listener) HasServer(serverId string) bool

判断是否包含某个配置

func (*Listener) HasServers

func (this *Listener) HasServers() bool

是否包含配置

func (*Listener) Reload

func (this *Listener) Reload() error

刷新

func (*Listener) RemoveServer

func (this *Listener) RemoveServer(serverId string)

删除配置

func (*Listener) Reset

func (this *Listener) Reset()

重置所有配置

func (*Listener) Shutdown

func (this *Listener) Shutdown() error

关闭

func (*Listener) Start

func (this *Listener) Start() error

启动

func (*Listener) TCPClients

func (this *Listener) TCPClients(maxSize int) []*TCPClient

获取TCP连接列表

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

管理器

func NewManager

func NewManager() *Manager

获取新对象

func (*Manager) ApplyServer

func (this *Manager) ApplyServer(server *teaconfigs.ServerConfig)

添加Server

func (*Manager) FindAllServers

func (this *Manager) FindAllServers() []*teaconfigs.ServerConfig

查找所有的Server

func (*Manager) FindServer

func (this *Manager) FindServer(serverId string) *teaconfigs.ServerConfig

查找Server

func (*Manager) FindServerErrors

func (this *Manager) FindServerErrors(serverId string) []string

查找Server相关错误

func (*Manager) FindServerListeners

func (this *Manager) FindServerListeners(serverId string) []*Listener

查找Server对应的Listener

func (*Manager) Reload

func (this *Manager) Reload() error

重载配置

func (*Manager) RemoveServer

func (this *Manager) RemoveServer(serverId string)

删除Server

func (*Manager) Restart

func (this *Manager) Restart() error

重启

func (*Manager) Shutdown

func (this *Manager) Shutdown() error

停止

func (*Manager) Start

func (this *Manager) Start() error

启动

func (*Manager) Wait

func (this *Manager) Wait()

等待

type NamedServer

type NamedServer struct {
	Name   string                   // 匹配后的域名
	Server *teaconfigs.ServerConfig // 匹配后的服务配置
}

域名和服务映射

type Request

type Request struct {
	// contains filtered or unexported fields
}

请求定义 HTTP HEADER RFC: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

func NewRequest

func NewRequest(rawRequest *http.Request) *Request

获取新的请求

func (*Request) CachePolicy

func (this *Request) CachePolicy() *shared.CachePolicy

func (*Request) Format

func (this *Request) Format(source string) string

利用请求参数格式化字符串

func (*Request) Forward

func (this *Request) Forward(writer *ResponseWriter) error

正向代理 TODO 支持WebSocket

func (*Request) IsCacheEnabled

func (this *Request) IsCacheEnabled() bool

判断缓存策略是否有效

func (*Request) IsWatching

func (this *Request) IsWatching() bool

判断是否在监控

func (*Request) Raw

func (this *Request) Raw() *http.Request

获取原始的请求

func (*Request) SetAttr

func (this *Request) SetAttr(key string, value string)

设置属性

func (*Request) SetCacheEnabled

func (this *Request) SetCacheEnabled()

func (*Request) SetCachePolicy

func (this *Request) SetCachePolicy(config *shared.CachePolicy)

func (*Request) SetHost

func (this *Request) SetHost(host string)

设置Host

func (*Request) SetIsWatching

func (this *Request) SetIsWatching(isWatching bool)

设置监控状态

func (*Request) SetRawScheme

func (this *Request) SetRawScheme(scheme string)

设置原始的scheme

func (*Request) SetURI

func (this *Request) SetURI(uri string)

设置URI

func (*Request) SetVarMapping

func (this *Request) SetVarMapping(varName string, varValue string)

添加自定义变量

func (*Request) WriteResponseHeaders

func (this *Request) WriteResponseHeaders(writer *ResponseWriter, statusCode int)

输出自定义Response Header

type RequestHook

type RequestHook struct {
	BeforeRequest func(req *Request, writer *ResponseWriter) (goNext bool)
	AfterRequest  func(req *Request, writer *ResponseWriter) (goNext bool)
}

请求Hook定义

type ResponseWriter

type ResponseWriter struct {
	// contains filtered or unexported fields
}

响应Writer

func NewResponseWriter

func NewResponseWriter(httpResponseWriter http.ResponseWriter) *ResponseWriter

包装对象

func (*ResponseWriter) AddHeaders

func (this *ResponseWriter) AddHeaders(header http.Header)

添加一组Header

func (*ResponseWriter) Body

func (this *ResponseWriter) Body() []byte

读取拷贝的Body数据

func (*ResponseWriter) BodyIsCopying

func (this *ResponseWriter) BodyIsCopying() bool

判断是否在拷贝Body数据

func (*ResponseWriter) Close

func (this *ResponseWriter) Close()

关闭

func (*ResponseWriter) Flush

func (this *ResponseWriter) Flush()

Flush

func (*ResponseWriter) Gzip

func (this *ResponseWriter) Gzip(config *teaconfigs.GzipConfig)

设置Gzip

func (*ResponseWriter) Header

func (this *ResponseWriter) Header() http.Header

获取Header

func (*ResponseWriter) HeaderData

func (this *ResponseWriter) HeaderData() []byte

读取Header二进制数据

func (*ResponseWriter) Hijack

func (this *ResponseWriter) Hijack() (conn net.Conn, buf *bufio.ReadWriter, err error)

Hijack

func (*ResponseWriter) Prepare

func (this *ResponseWriter) Prepare(size int64)

准备输出

func (*ResponseWriter) Raw

func (this *ResponseWriter) Raw() http.ResponseWriter

包装前的原始的Writer

func (*ResponseWriter) Reset

func (this *ResponseWriter) Reset(httpResponseWriter http.ResponseWriter)

重置

func (*ResponseWriter) SentBodyBytes

func (this *ResponseWriter) SentBodyBytes() int64

读取发送的字节数

func (*ResponseWriter) SetBodyCopying

func (this *ResponseWriter) SetBodyCopying(b bool)

设置拷贝Body数据

func (*ResponseWriter) StatusCode

func (this *ResponseWriter) StatusCode() int

读取状态码

func (*ResponseWriter) Write

func (this *ResponseWriter) Write(data []byte) (n int, err error)

写入数据

func (*ResponseWriter) WriteHeader

func (this *ResponseWriter) WriteHeader(statusCode int)

写入状态码

func (*ResponseWriter) WriteString

func (this *ResponseWriter) WriteString(s string) (n int, err error)

写入字符串

type Scheme

type Scheme = uint8

协议

const (
	SchemeHTTP   Scheme = 1
	SchemeHTTPS  Scheme = 2
	SchemeTCP    Scheme = 3
	SchemeTCPTLS Scheme = 4
)

type StaticDelivery

type StaticDelivery struct {
	// contains filtered or unexported fields
}

静态文件分发器

func NewStaticDelivery

func NewStaticDelivery() *StaticDelivery

获取新对象

func (*StaticDelivery) Read

func (this *StaticDelivery) Read(path string, stat os.FileInfo) (reader io.Reader, shouldClose bool, err error)

读取

type StaticFileCache

type StaticFileCache struct {
	// contains filtered or unexported fields
}

静态文件缓存

type TCPClient

type TCPClient struct {
	// contains filtered or unexported fields
}

TCP连接客户端

func NewTCPClient

func NewTCPClient(serverPool func() *teaconfigs.ServerConfig, conn net.Conn) *TCPClient

创建新的客户端对象

func (*TCPClient) Close

func (this *TCPClient) Close() error

关闭

func (*TCPClient) Connect

func (this *TCPClient) Connect()

连接后端服务器

func (*TCPClient) LConn

func (this *TCPClient) LConn() net.Conn

获取左连接 - 客户端

func (*TCPClient) RConn

func (this *TCPClient) RConn() net.Conn

获取右连接 - 后端服务器

func (*TCPClient) ReadSpeed

func (this *TCPClient) ReadSpeed() int64

获取读取的速度

func (*TCPClient) WriteSpeed

func (this *TCPClient) WriteSpeed() int64

获取写入的速度

type Tunnel

type Tunnel struct {
	// contains filtered or unexported fields
}

隧道状态管理

func NewTunnel

func NewTunnel(config *teaconfigs.TunnelConfig) *Tunnel

获取新对象

func (*Tunnel) Close

func (this *Tunnel) Close() error

关闭

func (*Tunnel) CountConnections

func (this *Tunnel) CountConnections() int

获取连接数量

func (*Tunnel) Id

func (this *Tunnel) Id() string

获取当前Tunnel的ID

func (*Tunnel) Start

func (this *Tunnel) Start() error

启动

func (*Tunnel) Write

func (this *Tunnel) Write(req *http.Request) (resp *http.Response, err error)

发送请求

type TunnelConnection

type TunnelConnection struct {
	// contains filtered or unexported fields
}

隧道连接

func NewTunnelConnection

func NewTunnelConnection(conn net.Conn, tunnelConfig *teaconfigs.TunnelConfig) *TunnelConnection

获取新对象

func (*TunnelConnection) Close

func (this *TunnelConnection) Close() error

关闭

func (*TunnelConnection) IsAuthenticated

func (this *TunnelConnection) IsAuthenticated() bool

判断是否已认证

func (*TunnelConnection) OnClose

func (this *TunnelConnection) OnClose(handler func(tunnelConn *TunnelConnection))

设置关闭回调

func (*TunnelConnection) Ping

func (this *TunnelConnection) Ping() error

Ping客户端

func (*TunnelConnection) RemoteAddr

func (this *TunnelConnection) RemoteAddr() string

远程地址

func (*TunnelConnection) Write

func (this *TunnelConnection) Write(req *http.Request) (*http.Response, error)

发送请求

type TunnelManager

type TunnelManager struct {
	// contains filtered or unexported fields
}

Tunnel管理器

func NewTunnelManager

func NewTunnelManager() *TunnelManager

获取新对象

func (*TunnelManager) FindTunnel

func (this *TunnelManager) FindTunnel(serverId, tunnelId string) *Tunnel

查找Tunnel

func (*TunnelManager) OnAttach

func (this *TunnelManager) OnAttach(server *teaconfigs.ServerConfig)

加载

func (*TunnelManager) OnDetach

func (this *TunnelManager) OnDetach(server *teaconfigs.ServerConfig)

卸载

type TunnelResponseBody

type TunnelResponseBody struct {
	io.ReadCloser
	// contains filtered or unexported fields
}

Tunnel响应包装,主要是为了覆盖Close()方法

func (*TunnelResponseBody) Close

func (this *TunnelResponseBody) Close() error

关闭

Directories

Path Synopsis
Package mitm provides tooling for MITMing TLS connections.
Package mitm provides tooling for MITMing TLS connections.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL