Documentation
¶
Index ¶
- Constants
- Variables
- func Can(action string, addr string, whitelist, blacklist *Permissions) bool
- func Connect(conn net.Conn, addr string) (net.Conn, error)
- func Dial(addr string, options ...DialOption) (net.Conn, error)
- func GenCertificate() (cert tls.Certificate, err error)
- func Handshake(conn net.Conn, options ...HandshakeOption) (net.Conn, error)
- func Obfs4Init(node Node, isServeNode bool) error
- func SetLogger(logger log.Logger)
- type Chain
- func (c *Chain) AddNode(nodes ...Node)
- func (c *Chain) AddNodeGroup(groups ...*NodeGroup)
- func (c *Chain) Conn() (conn net.Conn, err error)
- func (c *Chain) Dial(addr string) (conn net.Conn, err error)
- func (c *Chain) IsEmpty() bool
- func (c *Chain) LastNode() Node
- func (c *Chain) LastNodeGroup() *NodeGroup
- func (c *Chain) NodeGroups() []*NodeGroup
- func (c *Chain) Nodes() (nodes []Node)
- type Client
- type Connector
- func ForwardConnector() Connector
- func HTTP2Connector(user *url.Userinfo) Connector
- func HTTPConnector(user *url.Userinfo) Connector
- func SNIConnector(host string) Connector
- func SOCKS4AConnector() Connector
- func SOCKS4Connector() Connector
- func SOCKS5Connector(user *url.Userinfo) Connector
- func SSHDirectForwardConnector() Connector
- func SSHRemoteForwardConnector() Connector
- func ShadowConnector(cipher *url.Userinfo) Connector
- type DialOption
- type DialOptions
- type FIFOStrategy
- type FailFilter
- type Filter
- type Handler
- func AutoHandler(opts ...HandlerOption) Handler
- func HTTP2Handler(opts ...HandlerOption) Handler
- func HTTPHandler(opts ...HandlerOption) Handler
- func SNIHandler(opts ...HandlerOption) Handler
- func SOCKS4Handler(opts ...HandlerOption) Handler
- func SOCKS5Handler(opts ...HandlerOption) Handler
- func SSHForwardHandler(opts ...HandlerOption) Handler
- func ShadowHandler(opts ...HandlerOption) Handler
- func ShadowUDPdHandler(opts ...HandlerOption) Handler
- func TCPDirectForwardHandler(raddr string, opts ...HandlerOption) Handler
- func TCPRedirectHandler(opts ...HandlerOption) Handler
- func TCPRemoteForwardHandler(raddr string, opts ...HandlerOption) Handler
- func TcpRedirectSPHandler(opts ...HandlerOption) Handler
- func UDPDirectForwardHandler(raddr string, opts ...HandlerOption) Handler
- func UDPRemoteForwardHandler(raddr string, opts ...HandlerOption) Handler
- type HandlerOption
- func AddrHandlerOption(addr string) HandlerOption
- func BlacklistHandlerOption(blacklist *Permissions) HandlerOption
- func ChainHandlerOption(chain *Chain) HandlerOption
- func TLSConfigHandlerOption(config *tls.Config) HandlerOption
- func UsersHandlerOption(users ...*url.Userinfo) HandlerOption
- func WhitelistHandlerOption(whitelist *Permissions) HandlerOption
- type HandlerOptions
- type HandshakeOption
- func AddrHandshakeOption(addr string) HandshakeOption
- func HostHandshakeOption(host string) HandshakeOption
- func IntervalHandshakeOption(interval time.Duration) HandshakeOption
- func KCPConfigHandshakeOption(config *KCPConfig) HandshakeOption
- func QUICConfigHandshakeOption(config *QUICConfig) HandshakeOption
- func RetryHandshakeOption(retry int) HandshakeOption
- func TLSConfigHandshakeOption(config *tls.Config) HandshakeOption
- func TimeoutHandshakeOption(timeout time.Duration) HandshakeOption
- func UserHandshakeOption(user *url.Userinfo) HandshakeOption
- func WSOptionsHandshakeOption(options *WSOptions) HandshakeOption
- type HandshakeOptions
- type KCPConfig
- type Listener
- func H2CListener(addr string) (Listener, error)
- func H2Listener(addr string, config *tls.Config) (Listener, error)
- func HTTP2Listener(addr string, config *tls.Config) (Listener, error)
- func KCPListener(addr string, config *KCPConfig) (Listener, error)
- func MTLSListener(addr string, config *tls.Config) (Listener, error)
- func MWSListener(addr string, options *WSOptions) (Listener, error)
- func MWSSListener(addr string, tlsConfig *tls.Config, options *WSOptions) (Listener, error)
- func Obfs4Listener(addr string) (Listener, error)
- func ObfsHTTPListener(addr string) (Listener, error)
- func QUICListener(addr string, config *QUICConfig) (Listener, error)
- func SSHTunnelListener(addr string, config *SSHConfig) (Listener, error)
- func ShadowUDPListener(addr string, cipher *url.Userinfo, ttl time.Duration) (Listener, error)
- func TCPListener(addr string) (Listener, error)
- func TCPRemoteForwardListener(addr string, chain *Chain) (Listener, error)
- func TLSListener(addr string, config *tls.Config) (Listener, error)
- func UDPDirectForwardListener(addr string, ttl time.Duration) (Listener, error)
- func UDPRemoteForwardListener(addr string, chain *Chain, ttl time.Duration) (Listener, error)
- func WSListener(addr string, options *WSOptions) (Listener, error)
- func WSSListener(addr string, tlsConfig *tls.Config, options *WSOptions) (Listener, error)
- type LogLogger
- type Node
- type NodeGroup
- type NodeSelector
- type NopLogger
- type PasswordCallbackFunc
- type Permission
- type Permissions
- type PortRange
- type PortSet
- type QUICConfig
- type RandomStrategy
- type RoundStrategy
- type SSHConfig
- type SelectOption
- type SelectOptions
- type Server
- type Strategy
- type StringSet
- type Transporter
- func H2CTransporter() Transporter
- func H2Transporter(config *tls.Config) Transporter
- func HTTP2Transporter(config *tls.Config) Transporter
- func KCPTransporter(config *KCPConfig) Transporter
- func MTLSTransporter() Transporter
- func MWSSTransporter(opts *WSOptions) Transporter
- func MWSTransporter(opts *WSOptions) Transporter
- func Obfs4Transporter() Transporter
- func ObfsHTTPTransporter() Transporter
- func QUICTransporter(config *QUICConfig) Transporter
- func SSHForwardTransporter() Transporter
- func SSHTunnelTransporter() Transporter
- func TCPTransporter() Transporter
- func TLSTransporter() Transporter
- func WSSTransporter(opts *WSOptions) Transporter
- func WSTransporter(opts *WSOptions) Transporter
- type WSOptions
Constants ¶
const ( // MethodTLS is an extended SOCKS5 method for TLS. MethodTLS uint8 = 0x80 // MethodTLSAuth is an extended SOCKS5 method for TLS+AUTH. MethodTLSAuth uint8 = 0x82 // MethodMux is an extended SOCKS5 method for stream multiplexing. MethodMux = 0x88 )
const ( // CmdMuxBind is an extended SOCKS5 request CMD for // multiplexing transport with the binding server. CmdMuxBind uint8 = 0xF2 // CmdUDPTun is an extended SOCKS5 request CMD for UDP over TCP. CmdUDPTun uint8 = 0xF3 )
const ( DirectForwardRequest = "direct-tcpip" // RFC 4254 7.2 RemoteForwardRequest = "tcpip-forward" // RFC 4254 7.1 ForwardedTCPReturnRequest = "forwarded-tcpip" // RFC 4254 7.2 CancelRemoteForwardRequest = "cancel-tcpip-forward" // RFC 4254 7.1 GostSSHTunnelRequest = "gost-tunnel" // extended request type for ssh tunnel )
Applicable SSH Request types for Port Forwarding - RFC 4254 7.X
const Version = "2.5"
Version is the gost version.
Variables ¶
var ( // KeepAliveTime is the keep alive time period for TCP connection. KeepAliveTime = 180 * time.Second // DialTimeout is the timeout of dial. DialTimeout = 30 * time.Second // ReadTimeout is the timeout for reading. ReadTimeout = 30 * time.Second // WriteTimeout is the timeout for writing. WriteTimeout = 60 * time.Second // PingTimeout is the timeout for pinging. PingTimeout = 30 * time.Second // PingRetries is the reties of ping. PingRetries = 1 )
var ( // DefaultTLSConfig is a default TLS config for internal use DefaultTLSConfig *tls.Config // DefaultUserAgent is the default HTTP User-Agent header used by HTTP and websocket DefaultUserAgent = "Chrome/60.0.3112.90" )
var Debug bool
Debug is a flag that enables the debug log.
var DefaultClient = &Client{Connector: HTTPConnector(nil), Transporter: TCPTransporter()}
DefaultClient is a standard HTTP proxy client.
var ( // DefaultKCPConfig is the default KCP config. DefaultKCPConfig = &KCPConfig{ Key: "it's a secrect", Crypt: "aes", Mode: "fast", MTU: 1350, SndWnd: 1024, RcvWnd: 1024, DataShard: 10, ParityShard: 3, DSCP: 0, NoComp: false, AckNodelay: false, NoDelay: 0, Interval: 50, Resend: 0, NoCongestion: 0, SockBuf: 4194304, KeepAlive: 10, SnmpLog: "", SnmpPeriod: 60, Signal: false, } )
var ( // ErrEmptyChain is an error that implies the chain is empty. ErrEmptyChain = errors.New("empty chain") )
var ( // ErrNoneAvailable indicates there is no node available. ErrNoneAvailable = errors.New("none available") )
var IpProxyMap sync.Map
var (
// KCPSalt is the default salt for KCP cipher.
KCPSalt = "kcp-go"
)
var ProxyChainMap sync.Map
Functions ¶
func Can ¶
func Can(action string, addr string, whitelist, blacklist *Permissions) bool
Can tests whether the given action and address is allowed by the whitelist and blacklist.
func Dial ¶
func Dial(addr string, options ...DialOption) (net.Conn, error)
Dial connects to the address addr via the DefaultClient.
func GenCertificate ¶
func GenCertificate() (cert tls.Certificate, err error)
GenCertificate generates a random TLS certificate
Types ¶
type Chain ¶
type Chain struct { Retries int // contains filtered or unexported fields }
Chain is a proxy chain that holds a list of proxy nodes.
func (*Chain) AddNodeGroup ¶
AddNodeGroup appends the group(s) to the chain.
func (*Chain) Conn ¶
Conn obtains a handshaked connection to the last node of the chain. If the chain is empty, it returns an ErrEmptyChain error.
func (*Chain) Dial ¶
Dial connects to the target address addr through the chain. If the chain is empty, it will use the net.Dial directly.
func (*Chain) IsEmpty ¶
IsEmpty checks if the chain is empty. An empty chain means that there is no proxy node or node group in the chain.
func (*Chain) LastNode ¶
LastNode returns the last node of the node list. If the chain is empty, an empty node will be returned. If the last node is a node group, the first node in the group will be returned.
func (*Chain) LastNodeGroup ¶
LastNodeGroup returns the last group of the group list.
func (*Chain) NodeGroups ¶
NodeGroups returns the list of node group.
type Client ¶
type Client struct { Connector Connector Transporter Transporter }
Client is a proxy client. A client is divided into two layers: connector and transporter. Connector is responsible for connecting to the destination address through this proxy. Transporter performs a handshake with this proxy.
type Connector ¶
Connector is responsible for connecting to the destination address.
func ForwardConnector ¶
func ForwardConnector() Connector
ForwardConnector creates a Connector for data forward client.
func HTTP2Connector ¶
HTTP2Connector creates a Connector for HTTP2 proxy client. It accepts an optional auth info for HTTP Basic Authentication.
func HTTPConnector ¶
HTTPConnector creates a Connector for HTTP proxy client. It accepts an optional auth info for HTTP Basic Authentication.
func SNIConnector ¶
SNIConnector creates a Connector for SNI proxy client.
func SOCKS4AConnector ¶
func SOCKS4AConnector() Connector
SOCKS4AConnector creates a Connector for SOCKS4A proxy client.
func SOCKS4Connector ¶
func SOCKS4Connector() Connector
SOCKS4Connector creates a Connector for SOCKS4 proxy client.
func SOCKS5Connector ¶
SOCKS5Connector creates a connector for SOCKS5 proxy client. It accepts an optional auth info for SOCKS5 Username/Password Authentication.
func SSHDirectForwardConnector ¶
func SSHDirectForwardConnector() Connector
SSHDirectForwardConnector creates a Connector for SSH TCP direct port forwarding.
func SSHRemoteForwardConnector ¶
func SSHRemoteForwardConnector() Connector
SSHRemoteForwardConnector creates a Connector for SSH TCP remote port forwarding.
func ShadowConnector ¶
ShadowConnector creates a Connector for shadowsocks proxy client. It accepts a cipher info for shadowsocks data encryption/decryption. The cipher must not be nil.
type DialOption ¶
type DialOption func(opts *DialOptions)
DialOption allows a common way to set dial options.
func ChainDialOption ¶
func ChainDialOption(chain *Chain) DialOption
ChainDialOption specifies a chain used by Transporter.Dial
func TimeoutDialOption ¶
func TimeoutDialOption(timeout time.Duration) DialOption
TimeoutDialOption specifies the timeout used by Transporter.Dial
type DialOptions ¶
DialOptions describes the options for dialing.
type FIFOStrategy ¶
type FIFOStrategy struct{}
FIFOStrategy is a strategy for node selector. The node will be selected from first to last, and will stick to the selected node until it is failed.
func (*FIFOStrategy) Apply ¶
func (s *FIFOStrategy) Apply(nodes []Node) Node
Apply applies the fifo strategy for the nodes.
func (*FIFOStrategy) String ¶
func (s *FIFOStrategy) String() string
type FailFilter ¶
FailFilter filters the dead node. A node is marked as dead if its failed count is greater than MaxFails.
func (*FailFilter) String ¶
func (f *FailFilter) String() string
type Handler ¶
Handler is a proxy server handler
func AutoHandler ¶
func AutoHandler(opts ...HandlerOption) Handler
AutoHandler creates a server Handler for auto proxy server.
func HTTP2Handler ¶
func HTTP2Handler(opts ...HandlerOption) Handler
HTTP2Handler creates a server Handler for HTTP2 proxy server.
func HTTPHandler ¶
func HTTPHandler(opts ...HandlerOption) Handler
HTTPHandler creates a server Handler for HTTP proxy server.
func SNIHandler ¶
func SNIHandler(opts ...HandlerOption) Handler
SNIHandler creates a server Handler for SNI proxy server.
func SOCKS4Handler ¶
func SOCKS4Handler(opts ...HandlerOption) Handler
SOCKS4Handler creates a server Handler for SOCKS4(A) proxy server.
func SOCKS5Handler ¶
func SOCKS5Handler(opts ...HandlerOption) Handler
SOCKS5Handler creates a server Handler for SOCKS5 proxy server.
func SSHForwardHandler ¶
func SSHForwardHandler(opts ...HandlerOption) Handler
SSHForwardHandler creates a server Handler for SSH port forwarding server.
func ShadowHandler ¶
func ShadowHandler(opts ...HandlerOption) Handler
ShadowHandler creates a server Handler for shadowsocks proxy server.
func ShadowUDPdHandler ¶
func ShadowUDPdHandler(opts ...HandlerOption) Handler
ShadowUDPdHandler creates a server Handler for shadowsocks UDP relay server.
func TCPDirectForwardHandler ¶
func TCPDirectForwardHandler(raddr string, opts ...HandlerOption) Handler
TCPDirectForwardHandler creates a server Handler for TCP port forwarding server. The raddr is the remote address that the server will forward to.
func TCPRedirectHandler ¶
func TCPRedirectHandler(opts ...HandlerOption) Handler
TCPRedirectHandler creates a server Handler for TCP redirect server.
func TCPRemoteForwardHandler ¶
func TCPRemoteForwardHandler(raddr string, opts ...HandlerOption) Handler
TCPRemoteForwardHandler creates a server Handler for TCP remote port forwarding server. The raddr is the remote address that the server will forward to.
func TcpRedirectSPHandler ¶
func TcpRedirectSPHandler(opts ...HandlerOption) Handler
TCPRedirectHandler creates a server Handler for TCP redirect server.
func UDPDirectForwardHandler ¶
func UDPDirectForwardHandler(raddr string, opts ...HandlerOption) Handler
UDPDirectForwardHandler creates a server Handler for UDP port forwarding server. The raddr is the remote address that the server will forward to.
func UDPRemoteForwardHandler ¶
func UDPRemoteForwardHandler(raddr string, opts ...HandlerOption) Handler
UDPRemoteForwardHandler creates a server Handler for UDP remote port forwarding server. The raddr is the remote address that the server will forward to.
type HandlerOption ¶
type HandlerOption func(opts *HandlerOptions)
HandlerOption allows a common way to set handler options.
func AddrHandlerOption ¶
func AddrHandlerOption(addr string) HandlerOption
AddrHandlerOption sets the Addr option of HandlerOptions.
func BlacklistHandlerOption ¶
func BlacklistHandlerOption(blacklist *Permissions) HandlerOption
BlacklistHandlerOption sets the Blacklist option of HandlerOptions.
func ChainHandlerOption ¶
func ChainHandlerOption(chain *Chain) HandlerOption
ChainHandlerOption sets the Chain option of HandlerOptions.
func TLSConfigHandlerOption ¶
func TLSConfigHandlerOption(config *tls.Config) HandlerOption
TLSConfigHandlerOption sets the TLSConfig option of HandlerOptions.
func UsersHandlerOption ¶
func UsersHandlerOption(users ...*url.Userinfo) HandlerOption
UsersHandlerOption sets the Users option of HandlerOptions.
func WhitelistHandlerOption ¶
func WhitelistHandlerOption(whitelist *Permissions) HandlerOption
WhitelistHandlerOption sets the Whitelist option of HandlerOptions.
type HandlerOptions ¶
type HandlerOptions struct { Addr string Chain *Chain Users []*url.Userinfo TLSConfig *tls.Config Whitelist *Permissions Blacklist *Permissions }
HandlerOptions describes the options for Handler.
type HandshakeOption ¶
type HandshakeOption func(opts *HandshakeOptions)
HandshakeOption allows a common way to set handshake options.
func AddrHandshakeOption ¶
func AddrHandshakeOption(addr string) HandshakeOption
AddrHandshakeOption specifies the server address
func HostHandshakeOption ¶
func HostHandshakeOption(host string) HandshakeOption
HostHandshakeOption specifies the hostname
func IntervalHandshakeOption ¶
func IntervalHandshakeOption(interval time.Duration) HandshakeOption
IntervalHandshakeOption specifies the interval time used by Transporter.Handshake
func KCPConfigHandshakeOption ¶
func KCPConfigHandshakeOption(config *KCPConfig) HandshakeOption
KCPConfigHandshakeOption specifies the KCP config used by KCP handshake
func QUICConfigHandshakeOption ¶
func QUICConfigHandshakeOption(config *QUICConfig) HandshakeOption
QUICConfigHandshakeOption specifies the QUIC config used by QUIC handshake
func RetryHandshakeOption ¶
func RetryHandshakeOption(retry int) HandshakeOption
RetryHandshakeOption specifies the times of retry used by Transporter.Handshake
func TLSConfigHandshakeOption ¶
func TLSConfigHandshakeOption(config *tls.Config) HandshakeOption
TLSConfigHandshakeOption specifies the TLS config used by Transporter.Handshake
func TimeoutHandshakeOption ¶
func TimeoutHandshakeOption(timeout time.Duration) HandshakeOption
TimeoutHandshakeOption specifies the timeout used by Transporter.Handshake
func UserHandshakeOption ¶
func UserHandshakeOption(user *url.Userinfo) HandshakeOption
UserHandshakeOption specifies the user used by Transporter.Handshake
func WSOptionsHandshakeOption ¶
func WSOptionsHandshakeOption(options *WSOptions) HandshakeOption
WSOptionsHandshakeOption specifies the websocket options used by websocket handshake
type HandshakeOptions ¶
type HandshakeOptions struct { Addr string Host string User *url.Userinfo Timeout time.Duration Interval time.Duration Retry int TLSConfig *tls.Config WSOptions *WSOptions KCPConfig *KCPConfig QUICConfig *QUICConfig }
HandshakeOptions describes the options for handshake.
type KCPConfig ¶
type KCPConfig struct { Key string `json:"key"` Crypt string `json:"crypt"` Mode string `json:"mode"` MTU int `json:"mtu"` SndWnd int `json:"sndwnd"` RcvWnd int `json:"rcvwnd"` DataShard int `json:"datashard"` ParityShard int `json:"parityshard"` DSCP int `json:"dscp"` NoComp bool `json:"nocomp"` AckNodelay bool `json:"acknodelay"` NoDelay int `json:"nodelay"` Interval int `json:"interval"` Resend int `json:"resend"` NoCongestion int `json:"nc"` SockBuf int `json:"sockbuf"` KeepAlive int `json:"keepalive"` SnmpLog string `json:"snmplog"` SnmpPeriod int `json:"snmpperiod"` Signal bool `json:"signal"` // Signal enables the signal SIGUSR1 feature. }
KCPConfig describes the config for KCP.
type Listener ¶
Listener is a proxy server listener, just like a net.Listener.
func H2CListener ¶
H2CListener creates a Listener for HTTP2 h2c tunnel server.
func H2Listener ¶
H2Listener creates a Listener for HTTP2 h2 tunnel server.
func HTTP2Listener ¶
HTTP2Listener creates a Listener for HTTP2 proxy server.
func KCPListener ¶
KCPListener creates a Listener for KCP proxy server.
func MTLSListener ¶
MTLSListener creates a Listener for multiplex-TLS proxy server.
func MWSListener ¶
MWSListener creates a Listener for multiplex-websocket proxy server.
func MWSSListener ¶
MWSSListener creates a Listener for multiplex-websocket secure proxy server.
func Obfs4Listener ¶
Obfs4Listener creates a Listener for obfs4 server.
func ObfsHTTPListener ¶
ObfsHTTPListener creates a Listener for HTTP obfuscating tunnel server.
func QUICListener ¶
func QUICListener(addr string, config *QUICConfig) (Listener, error)
QUICListener creates a Listener for QUIC proxy server.
func SSHTunnelListener ¶
SSHTunnelListener creates a Listener for SSH tunnel server.
func ShadowUDPListener ¶
ShadowUDPListener creates a Listener for shadowsocks UDP relay server.
func TCPListener ¶
TCPListener creates a Listener for TCP proxy server.
func TCPRemoteForwardListener ¶
TCPRemoteForwardListener creates a Listener for TCP remote port forwarding server.
func TLSListener ¶
TLSListener creates a Listener for TLS proxy server.
func UDPDirectForwardListener ¶
UDPDirectForwardListener creates a Listener for UDP port forwarding server.
func UDPRemoteForwardListener ¶
UDPRemoteForwardListener creates a Listener for UDP remote port forwarding server.
func WSListener ¶
WSListener creates a Listener for websocket proxy server.
type LogLogger ¶
type LogLogger struct { }
LogLogger uses the standard log package as the logger
type Node ¶
type Node struct { ID int Addr string Host string Protocol string Transport string Remote string // remote address, used by tcp/udp port forwarding User *url.Userinfo Values url.Values DialOptions []DialOption HandshakeOptions []HandshakeOption Client *Client // contains filtered or unexported fields }
Node is a proxy node, mainly used to construct a proxy chain.
func ParseNode ¶
ParseNode parses the node info. The proxy node string pattern is [scheme://][user:pass@host]:port. Scheme can be divided into two parts by character '+', such as: http+tls.
type NodeGroup ¶
type NodeGroup struct { ID int Options []SelectOption Selector NodeSelector // contains filtered or unexported fields }
NodeGroup is a group of nodes.
type NodeSelector ¶
type NodeSelector interface {
Select(nodes []Node, opts ...SelectOption) (Node, error)
}
NodeSelector as a mechanism to pick nodes and mark their status.
type NopLogger ¶
type NopLogger struct { }
NopLogger is a dummy logger that discards the log outputs
type PasswordCallbackFunc ¶
type PasswordCallbackFunc func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error)
PasswordCallbackFunc is a callback function used by SSH server.
type Permission ¶
Permission is a rule for blacklist and whitelist.
type Permissions ¶
type Permissions []Permission
Permissions is a set of Permission.
func ParsePermissions ¶
func ParsePermissions(s string) (*Permissions, error)
ParsePermissions parses the s to a Permissions.
type PortRange ¶
type PortRange struct {
Min, Max int
}
PortRange specifies the range of port, such as 1000-2000.
func ParsePortRange ¶
ParsePortRange parses the s to a PortRange. The s may be a '*' means 0-65535.
type PortSet ¶
type PortSet []PortRange
PortSet is a set of PortRange
func ParsePortSet ¶
ParsePortSet parses the s to a PortSet. The s shoud be a comma separated string.
type QUICConfig ¶
type QUICConfig struct { TLSConfig *tls.Config Timeout time.Duration KeepAlive bool IdleTimeout time.Duration Key []byte }
QUICConfig is the config for QUIC client and server
type RandomStrategy ¶
type RandomStrategy struct { Seed int64 // contains filtered or unexported fields }
RandomStrategy is a strategy for node selector. The node will be selected randomly.
func (*RandomStrategy) Apply ¶
func (s *RandomStrategy) Apply(nodes []Node) Node
Apply applies the random strategy for the nodes.
func (*RandomStrategy) String ¶
func (s *RandomStrategy) String() string
type RoundStrategy ¶
type RoundStrategy struct {
// contains filtered or unexported fields
}
RoundStrategy is a strategy for node selector. The node will be selected by round-robin algorithm.
func (*RoundStrategy) Apply ¶
func (s *RoundStrategy) Apply(nodes []Node) Node
Apply applies the round-robin strategy for the nodes.
func (*RoundStrategy) String ¶
func (s *RoundStrategy) String() string
type SelectOption ¶
type SelectOption func(*SelectOptions)
SelectOption is the option used when making a select call.
func WithFilter ¶
func WithFilter(f ...Filter) SelectOption
WithFilter adds a filter function to the list of filters used during the Select call.
func WithStrategy ¶
func WithStrategy(s Strategy) SelectOption
WithStrategy sets the selector strategy
type SelectOptions ¶
SelectOptions is the options for node selection.
type StringSet ¶
type StringSet []string
StringSet is a set of string.
func ParseStringSet ¶
ParseStringSet parses the s to a StringSet. The s shoud be a comma separated string.
type Transporter ¶
type Transporter interface { Dial(addr string, options ...DialOption) (net.Conn, error) Handshake(conn net.Conn, options ...HandshakeOption) (net.Conn, error) // Indicate that the Transporter supports multiplex Multiplex() bool }
Transporter is responsible for handshaking with the proxy server.
func H2CTransporter ¶
func H2CTransporter() Transporter
H2CTransporter creates a Transporter that is used by HTTP2 h2c tunnel client.
func H2Transporter ¶
func H2Transporter(config *tls.Config) Transporter
H2Transporter creates a Transporter that is used by HTTP2 h2 tunnel client.
func HTTP2Transporter ¶
func HTTP2Transporter(config *tls.Config) Transporter
HTTP2Transporter creates a Transporter that is used by HTTP2 h2 proxy client.
func KCPTransporter ¶
func KCPTransporter(config *KCPConfig) Transporter
KCPTransporter creates a Transporter that is used by KCP proxy client.
func MTLSTransporter ¶
func MTLSTransporter() Transporter
MTLSTransporter creates a Transporter that is used by multiplex-TLS proxy client.
func MWSSTransporter ¶
func MWSSTransporter(opts *WSOptions) Transporter
MWSSTransporter creates a Transporter that is used by multiplex-websocket secure proxy client.
func MWSTransporter ¶
func MWSTransporter(opts *WSOptions) Transporter
MWSTransporter creates a Transporter that is used by multiplex-websocket proxy client.
func Obfs4Transporter ¶
func Obfs4Transporter() Transporter
Obfs4Transporter creates a Transporter that is used by obfs4 client.
func ObfsHTTPTransporter ¶
func ObfsHTTPTransporter() Transporter
ObfsHTTPTransporter creates a Transporter that is used by HTTP obfuscating tunnel client.
func QUICTransporter ¶
func QUICTransporter(config *QUICConfig) Transporter
QUICTransporter creates a Transporter that is used by QUIC proxy client.
func SSHForwardTransporter ¶
func SSHForwardTransporter() Transporter
SSHForwardTransporter creates a Transporter that is used by SSH port forwarding server.
func SSHTunnelTransporter ¶
func SSHTunnelTransporter() Transporter
SSHTunnelTransporter creates a Transporter that is used by SSH tunnel client.
func TCPTransporter ¶
func TCPTransporter() Transporter
TCPTransporter creates a transporter for TCP proxy client.
func TLSTransporter ¶
func TLSTransporter() Transporter
TLSTransporter creates a Transporter that is used by TLS proxy client.
func WSSTransporter ¶
func WSSTransporter(opts *WSOptions) Transporter
WSSTransporter creates a Transporter that is used by websocket secure proxy client.
func WSTransporter ¶
func WSTransporter(opts *WSOptions) Transporter
WSTransporter creates a Transporter that is used by websocket proxy client.