proxy

package
v1.0.8 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2024 License: AGPL-3.0, MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func EqualFold

func EqualFold(s, t string) bool

EqualFold is strings.EqualFold, ASCII only. It reports whether s and t are equal, ASCII-case-insensitively.

func ParseBasicAuth

func ParseBasicAuth(auth string) (username, password string, ok bool)

ParseBasicAuth parses an HTTP Basic Authentication string. "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" returns ("Aladdin", "open sesame", true).

Types

type Addon

type Addon interface {
	// A client has connected to mitmproxy. Note that a connection can correspond to multiple HTTP requests.
	ClientConnected(*ClientConn)

	// A client connection has been closed (either by us or the client).
	ClientDisconnected(*ClientConn)

	// Mitmproxy has connected to a server.
	ServerConnected(*ConnContext)

	// A server connection has been closed (either by us or the server).
	ServerDisconnected(*ConnContext)

	// The TLS handshake with the server has been completed successfully.
	TlsEstablishedServer(*ConnContext)

	// HTTP request headers were successfully read. At this point, the body is empty.
	Requestheaders(*Flow)

	// The full HTTP request has been read.
	Request(*Flow)

	// HTTP response headers were successfully read. At this point, the body is empty.
	Responseheaders(*Flow)

	// The full HTTP response has been read.
	Response(*Flow)

	// Stream request body modifier
	StreamRequestModifier(*Flow, io.Reader) io.Reader

	// Stream response body modifier
	StreamResponseModifier(*Flow, io.Reader) io.Reader

	// onAccessProxyServer
	AccessProxyServer(req *http.Request, res http.ResponseWriter)
}

type BaseAddon

type BaseAddon struct{}

BaseAddon do nothing

func (*BaseAddon) AccessProxyServer

func (addon *BaseAddon) AccessProxyServer(req *http.Request, res http.ResponseWriter)

func (*BaseAddon) ClientConnected

func (addon *BaseAddon) ClientConnected(*ClientConn)

func (*BaseAddon) ClientDisconnected

func (addon *BaseAddon) ClientDisconnected(*ClientConn)

func (*BaseAddon) Request

func (addon *BaseAddon) Request(*Flow)

func (*BaseAddon) Requestheaders

func (addon *BaseAddon) Requestheaders(*Flow)

func (*BaseAddon) Response

func (addon *BaseAddon) Response(*Flow)

func (*BaseAddon) Responseheaders

func (addon *BaseAddon) Responseheaders(*Flow)

func (*BaseAddon) ServerConnected

func (addon *BaseAddon) ServerConnected(*ConnContext)

func (*BaseAddon) ServerDisconnected

func (addon *BaseAddon) ServerDisconnected(*ConnContext)

func (*BaseAddon) StreamRequestModifier

func (addon *BaseAddon) StreamRequestModifier(f *Flow, in io.Reader) io.Reader

func (*BaseAddon) StreamResponseModifier

func (addon *BaseAddon) StreamResponseModifier(f *Flow, in io.Reader) io.Reader

func (*BaseAddon) TlsEstablishedServer

func (addon *BaseAddon) TlsEstablishedServer(*ConnContext)

type ClientConn

type ClientConn struct {
	Id                 uuid.UUID
	Conn               net.Conn
	Tls                bool
	NegotiatedProtocol string
	UpstreamCert       bool // Connect to upstream server to look up certificate details. Default: True
	// contains filtered or unexported fields
}

client connection

func (*ClientConn) MarshalJSON

func (c *ClientConn) MarshalJSON() ([]byte, error)

type ConnContext

type ConnContext struct {
	ClientConn *ClientConn `json:"clientConn"`
	ServerConn *ServerConn `json:"serverConn"`
	Intercept  bool        `json:"intercept"` // Indicates whether to parse HTTPS
	FlowCount  uint32      `json:"-"`         // Number of HTTP requests made on the same connection
	// contains filtered or unexported fields
}

connection context

func (*ConnContext) Id

func (connCtx *ConnContext) Id() uuid.UUID

type Flow

type Flow struct {
	Id          uuid.UUID
	ConnContext *ConnContext
	Request     *Request
	Response    *Response

	// https://docs.mitmproxy.org/stable/overview-features/#streaming
	// 如果为 true,则不缓冲 Request.Body 和 Response.Body,且不进入之后的 Addon.Request 和 Addon.Response
	Stream            bool
	UseSeparateClient bool // use separate http client to send http request
	// contains filtered or unexported fields
}

flow

func (*Flow) Done

func (f *Flow) Done() <-chan struct{}

func (*Flow) MarshalJSON

func (f *Flow) MarshalJSON() ([]byte, error)

type LogAddon

type LogAddon struct {
	BaseAddon
}

LogAddon log connection and flow

func (*LogAddon) ClientConnected

func (addon *LogAddon) ClientConnected(client *ClientConn)

func (*LogAddon) ClientDisconnected

func (addon *LogAddon) ClientDisconnected(client *ClientConn)

func (*LogAddon) Requestheaders

func (addon *LogAddon) Requestheaders(f *Flow)

func (*LogAddon) ServerConnected

func (addon *LogAddon) ServerConnected(connCtx *ConnContext)

func (*LogAddon) ServerDisconnected

func (addon *LogAddon) ServerDisconnected(connCtx *ConnContext)

type Options

type Options struct {
	Username          string
	Password          string
	Header            string
	Debug             int
	Addr              string
	StreamLargeBodies int64 // 当请求或响应体大于此字节时,转为 stream 模式
	SslInsecure       bool
	CaRootPath        string
	Upstream          string
}

type Proxy

type Proxy struct {
	Opts    *Options
	Version string
	Addons  []Addon
	// contains filtered or unexported fields
}

func NewProxy

func NewProxy(opts *Options) (*Proxy, error)

func (*Proxy) AddAddon

func (proxy *Proxy) AddAddon(addon Addon)

func (*Proxy) Close

func (proxy *Proxy) Close() error

func (*Proxy) GetCertificate

func (proxy *Proxy) GetCertificate() x509.Certificate

func (*Proxy) SetShouldInterceptRule

func (proxy *Proxy) SetShouldInterceptRule(rule func(req *http.Request) bool)

func (*Proxy) SetUpstreamProxy

func (proxy *Proxy) SetUpstreamProxy(fn func(req *http.Request) (*url.URL, error))

func (*Proxy) Shutdown

func (proxy *Proxy) Shutdown(ctx context.Context) error

func (*Proxy) Start

func (proxy *Proxy) Start() error

type Request

type Request struct {
	Method string
	URL    *url.URL
	Proto  string
	Header http.Header
	Body   []byte
	// contains filtered or unexported fields
}

flow http request

func (*Request) MarshalJSON

func (req *Request) MarshalJSON() ([]byte, error)

func (*Request) Raw

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

func (*Request) UnmarshalJSON

func (req *Request) UnmarshalJSON(data []byte) error

type Response

type Response struct {
	StatusCode int         `json:"statusCode"`
	Header     http.Header `json:"header"`
	Body       []byte      `json:"-"`
	BodyReader io.Reader
	// contains filtered or unexported fields
}

flow http response

func (*Response) DecodedBody

func (r *Response) DecodedBody() ([]byte, error)

func (*Response) IsTextContentType

func (r *Response) IsTextContentType() bool

func (*Response) ReplaceToDecodedBody

func (r *Response) ReplaceToDecodedBody()

type ServerConn

type ServerConn struct {
	Id      uuid.UUID
	Address string
	Conn    net.Conn
	// contains filtered or unexported fields
}

server connection

func (*ServerConn) MarshalJSON

func (c *ServerConn) MarshalJSON() ([]byte, error)

func (*ServerConn) TlsState

func (c *ServerConn) TlsState() *tls.ConnectionState

type UpstreamCertAddon added in v1.0.8

type UpstreamCertAddon struct {
	BaseAddon
	UpstreamCert bool // Connect to upstream server to look up certificate details.
}

func NewUpstreamCertAddon added in v1.0.8

func NewUpstreamCertAddon(upstreamCert bool) *UpstreamCertAddon

func (*UpstreamCertAddon) ClientConnected added in v1.0.8

func (addon *UpstreamCertAddon) ClientConnected(conn *ClientConn)

Jump to

Keyboard shortcuts

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