Documentation ¶
Overview ¶
Package martian provides an HTTP/1.1 proxy with an API for configurable request and response modifiers.
Index ¶
- Constants
- Variables
- func Init()
- type Context
- func (ctx *Context) APIRequest()
- func (ctx *Context) Get(key string) (interface{}, bool)
- func (ctx *Context) ID() string
- func (ctx *Context) IsAPIRequest() bool
- func (ctx *Context) Session() *Session
- func (ctx *Context) Set(key string, val interface{})
- func (ctx *Context) SkipLogging()
- func (ctx *Context) SkipRoundTrip()
- func (ctx *Context) SkippingLogging() bool
- func (ctx *Context) SkippingRoundTrip() bool
- type IdleTimeoutConn
- type MultiError
- type Proxy
- func (p *Proxy) Close()
- func (p *Proxy) Closing() bool
- func (p *Proxy) GetRoundTripper() http.RoundTripper
- func (p *Proxy) Serve(l net.Listener) error
- func (p *Proxy) SetDial(dial func(string, string) (net.Conn, error))
- func (p *Proxy) SetDownstreamProxy(proxyURL *url.URL)
- func (p *Proxy) SetMITM(config *mitm.Config)
- func (p *Proxy) SetRequestModifier(reqmod RequestModifier)
- func (p *Proxy) SetResponseModifier(resmod ResponseModifier)
- func (p *Proxy) SetRoundTripper(rt http.RoundTripper)
- func (p *Proxy) SetTimeout(timeout time.Duration)
- type RequestModifier
- type RequestModifierFunc
- type RequestResponseModifier
- type ResponseModifier
- type ResponseModifierFunc
- type Session
- func (s *Session) Get(key string) (interface{}, bool)
- func (s *Session) Hijack() (net.Conn, *bufio.ReadWriter, error)
- func (s *Session) Hijacked() bool
- func (s *Session) ID() string
- func (s *Session) IsSecure() bool
- func (s *Session) MarkInsecure()
- func (s *Session) MarkSecure()
- func (s *Session) Set(key string, val interface{})
Constants ¶
const MaxRetries = 25
const RetryAfterTime = 15
Variables ¶
var AntsPool *ants.Pool
var (
DefaultBufSize = 131072
)
var DefaultProxyIdleTimeout = 20 * time.Second
Functions ¶
Types ¶
type Context ¶
type Context struct {
// contains filtered or unexported fields
}
Context provides information and storage for a single request/response pair. Contexts are linked to shared session that is used for multiple requests on a single connection.
func NewContext ¶
NewContext returns a context for the in-flight HTTP request.
func TestContext ¶
func TestContext(req *http.Request, conn net.Conn, bw *bufio.ReadWriter) (ctx *Context, remove func(), err error)
TestContext builds a new session and associated context and returns the context and a function to remove the associated context. If it fails to generate either a new session or a new context it will return an error. Intended for tests only.
func (*Context) APIRequest ¶
func (ctx *Context) APIRequest()
APIRequest marks the requests as a request to the proxy API.
func (*Context) IsAPIRequest ¶
IsAPIRequest returns true when the request patterns matches a pattern in the proxy mux. The mux is usually defined as a parameter to the api.Forwarder, which uses http.DefaultServeMux by default.
func (*Context) Set ¶
Set takes a key and associates it with val in the context. The value is persisted for the duration of the request and is removed on the following request.
func (*Context) SkipLogging ¶
func (ctx *Context) SkipLogging()
SkipLogging skips logging by Martian loggers for the current request.
func (*Context) SkipRoundTrip ¶
func (ctx *Context) SkipRoundTrip()
SkipRoundTrip skips the round trip for the current request.
func (*Context) SkippingLogging ¶
SkippingLogging returns whether the current request / response pair will be logged.
func (*Context) SkippingRoundTrip ¶
SkippingRoundTrip returns whether the current round trip will be skipped.
type IdleTimeoutConn ¶
type IdleTimeoutConn struct { LastTs int64 Conn net.Conn // contains filtered or unexported fields }
func (*IdleTimeoutConn) UpdateIdleTime ¶ added in v3.3.8
func (ic *IdleTimeoutConn) UpdateIdleTime()
type MultiError ¶
type MultiError struct {
// contains filtered or unexported fields
}
MultiError is a collection of errors that implements the error interface.
func (*MultiError) Add ¶
func (merr *MultiError) Add(err error)
Add appends an error to the error collection.
func (*MultiError) Empty ¶
func (merr *MultiError) Empty() bool
Empty returns whether the *MultiError contains any errors.
func (*MultiError) Error ¶
func (merr *MultiError) Error() string
Error returns the list of errors separated by newlines.
func (*MultiError) Errors ¶
func (merr *MultiError) Errors() []error
Errors returns the error slice containing the error collection.
type Proxy ¶
type Proxy struct {
// contains filtered or unexported fields
}
Proxy is an HTTP proxy with support for TLS MITM and customizable behavior.
func (*Proxy) Close ¶
func (p *Proxy) Close()
Close sets the proxy to the closing state so it stops receiving new connections, finishes processing any inflight requests, and closes existing connections without reading anymore requests from them.
func (*Proxy) GetRoundTripper ¶
func (p *Proxy) GetRoundTripper() http.RoundTripper
GetRoundTripper gets the http.RoundTripper of the proxy.
func (*Proxy) SetDownstreamProxy ¶
SetDownstreamProxy sets the proxy that receives requests from the upstream proxy.
func (*Proxy) SetRequestModifier ¶
func (p *Proxy) SetRequestModifier(reqmod RequestModifier)
SetRequestModifier sets the request modifier.
func (*Proxy) SetResponseModifier ¶
func (p *Proxy) SetResponseModifier(resmod ResponseModifier)
SetResponseModifier sets the response modifier.
func (*Proxy) SetRoundTripper ¶
func (p *Proxy) SetRoundTripper(rt http.RoundTripper)
SetRoundTripper sets the http.RoundTripper of the proxy.
func (*Proxy) SetTimeout ¶
SetTimeout sets the request timeout of the proxy.
type RequestModifier ¶
type RequestModifier interface { // ModifyRequest modifies the request. ModifyRequest(req *http.Request) error }
RequestModifier is an interface that defines a request modifier that can be used by a proxy.
type RequestModifierFunc ¶
RequestModifierFunc is an adapter for using a function with the given signature as a RequestModifier.
func (RequestModifierFunc) ModifyRequest ¶
func (f RequestModifierFunc) ModifyRequest(req *http.Request) error
ModifyRequest modifies the request using the given function.
type RequestResponseModifier ¶
type RequestResponseModifier interface { RequestModifier ResponseModifier }
RequestResponseModifier is an interface that is both a ResponseModifier and a RequestModifier.
func Noop ¶
func Noop(id string) RequestResponseModifier
Noop returns a modifier that does not change the request or the response.
type ResponseModifier ¶
type ResponseModifier interface { // ModifyResponse modifies the response. ModifyResponse(res *http.Response) error }
ResponseModifier is an interface that defines a response modifier that can be used by a proxy.
type ResponseModifierFunc ¶
ResponseModifierFunc is an adapter for using a function with the given signature as a ResponseModifier.
func (ResponseModifierFunc) ModifyResponse ¶
func (f ResponseModifierFunc) ModifyResponse(res *http.Response) error
ModifyResponse modifies the response using the given function.
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session provides information and storage about a connection.
func (*Session) Hijack ¶
Hijack takes control of the connection from the proxy. No further action will be taken by the proxy and the connection will be closed following the return of the hijacker.
func (*Session) IsSecure ¶
IsSecure returns whether the current session is from a secure connection, such as when receiving requests from a TLS connection that has been MITM'd.
func (*Session) MarkInsecure ¶
func (s *Session) MarkInsecure()
MarkInsecure marks the session as insecure.
Directories ¶
Path | Synopsis |
---|---|
Package api contains a forwarder to route system HTTP requests to the local API server.
|
Package api contains a forwarder to route system HTTP requests to the local API server. |
Package auth provides filtering support for a martian.Proxy based on auth ID.
|
Package auth provides filtering support for a martian.Proxy based on auth ID. |
Package body allows for the replacement of message body on responses.
|
Package body allows for the replacement of message body on responses. |
cmd
|
|
marbl
Command-line tool to view .marbl files.
|
Command-line tool to view .marbl files. |
proxy
proxy is an HTTP/S proxy configurable via an HTTP API.
|
proxy is an HTTP/S proxy configurable via an HTTP API. |
Package cookie allows for the modification of cookies on http requests and responses.
|
Package cookie allows for the modification of cookies on http requests and responses. |
Package cors provides CORS support for http.Handlers.
|
Package cors provides CORS support for http.Handlers. |
Package cybervillains provides the publically published Selenium project CyberVillains certificate and key.
|
Package cybervillains provides the publically published Selenium project CyberVillains certificate and key. |
Package failure provides a verifier that always fails, adding a given message to the multierror log.
|
Package failure provides a verifier that always fails, adding a given message to the multierror log. |
Package fifo provides Group, which is a list of modifiers that are executed consecutively.
|
Package fifo provides Group, which is a list of modifiers that are executed consecutively. |
Package filter provides a modifier that executes a given set of child modifiers based on the evaluated value of the provided conditional.
|
Package filter provides a modifier that executes a given set of child modifiers based on the evaluated value of the provided conditional. |
Package h2 contains basic HTTP/2 handling for Martian.
|
Package h2 contains basic HTTP/2 handling for Martian. |
grpc
Package grpc contains gRPC functionality for Martian proxy.
|
Package grpc contains gRPC functionality for Martian proxy. |
testing
Package testing contains a test fixture for working with gRPC over HTTP/2.
|
Package testing contains a test fixture for working with gRPC over HTTP/2. |
Package har collects HTTP requests and responses and stores them in HAR format.
|
Package har collects HTTP requests and responses and stores them in HAR format. |
Package header provides utilities for modifying, filtering, and verifying headers in martian.Proxy.
|
Package header provides utilities for modifying, filtering, and verifying headers in martian.Proxy. |
Package httpspec provides a modifier stack that has been preconfigured to provide spec-compliant HTTP proxy behavior.
|
Package httpspec provides a modifier stack that has been preconfigured to provide spec-compliant HTTP proxy behavior. |
Package ipauth provides a martian.Modifier that sets auth based on IP.
|
Package ipauth provides a martian.Modifier that sets auth based on IP. |
Package log provides a universal logger for martian packages.
|
Package log provides a universal logger for martian packages. |
Package marbl provides HTTP traffic logs streamed over websockets that can be added to any point within a Martian modifier tree.
|
Package marbl provides HTTP traffic logs streamed over websockets that can be added to any point within a Martian modifier tree. |
Package martianhttp provides HTTP handlers for managing the state of a martian.Proxy.
|
Package martianhttp provides HTTP handlers for managing the state of a martian.Proxy. |
Package martianlog provides a Martian modifier that logs the request and response.
|
Package martianlog provides a Martian modifier that logs the request and response. |
Package martiantest provides helper utilities for testing modifiers.
|
Package martiantest provides helper utilities for testing modifiers. |
Package martianurl provides utilities for modifying, filtering, and verifying URLs in martian.Proxy.
|
Package martianurl provides utilities for modifying, filtering, and verifying URLs in martian.Proxy. |
Package messageview provides no-op snapshots for HTTP requests and responses.
|
Package messageview provides no-op snapshots for HTTP requests and responses. |
Package method provides utilities for working with request methods.
|
Package method provides utilities for working with request methods. |
Package mitm provides tooling for MITMing TLS connections.
|
Package mitm provides tooling for MITMing TLS connections. |
Package mobile configures and instantiates a Martian Proxy.
|
Package mobile configures and instantiates a Martian Proxy. |
Package noop provides a martian.RequestResponseModifier that does not modify the request or response.
|
Package noop provides a martian.RequestResponseModifier that does not modify the request or response. |
Package parse constructs martian modifiers from JSON messages.
|
Package parse constructs martian modifiers from JSON messages. |
Package pingback provides verification that specific URLs have been seen by the proxy.
|
Package pingback provides verification that specific URLs have been seen by the proxy. |
Package port provides utilities for modifying and filtering based on the port of request URLs.
|
Package port provides utilities for modifying and filtering based on the port of request URLs. |
Package priority allows grouping modifiers and applying them in priority order.
|
Package priority allows grouping modifiers and applying them in priority order. |
Package proxyauth provides authentication support via the Proxy-Authorization header.
|
Package proxyauth provides authentication support via the Proxy-Authorization header. |
Package proxyutil provides functionality for building proxies.
|
Package proxyutil provides functionality for building proxies. |
Package querystring contains a modifier to rewrite query strings in a request.
|
Package querystring contains a modifier to rewrite query strings in a request. |
Package servemux contains a filter that executes modifiers when there is a pattern match in a mux.
|
Package servemux contains a filter that executes modifiers when there is a pattern match in a mux. |
Package skip provides a request modifier to skip the HTTP round-trip.
|
Package skip provides a request modifier to skip the HTTP round-trip. |
Package stash provides a modifier that stores the request URL in a specified header.
|
Package stash provides a modifier that stores the request URL in a specified header. |
Package static provides a modifier that allows Martian to return static files local to Martian.
|
Package static provides a modifier that allows Martian to return static files local to Martian. |
Package status contains a modifier to rewrite the status code on a response.
|
Package status contains a modifier to rewrite the status code on a response. |
Package trafficshape provides tools for simulating latency and bandwidth at the network layer.
|
Package trafficshape provides tools for simulating latency and bandwidth at the network layer. |
Package verify provides support for using martian modifiers for request and response verifications.
|
Package verify provides support for using martian modifiers for request and response verifications. |