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 PeriodReload(r Reloader, configFile string) error
- func SetLogger(logger log.Logger)
- type Bypass
- type Chain
- func (c *Chain) AddNode(nodes ...Node)
- func (c *Chain) AddNodeGroup(groups ...*NodeGroup)
- func (c *Chain) Conn(opts ...ChainOption) (conn net.Conn, err error)
- func (c *Chain) Dial(addr string, opts ...ChainOption) (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 ChainOption
- type ChainOptions
- type Client
- type ConnectOption
- type ConnectOptions
- 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 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 BypassHandlerOption(bypass *Bypass) HandlerOption
- func ChainHandlerOption(chain *Chain) HandlerOption
- func HostsHandlerOption(hosts *Hosts) HandlerOption
- func ProbeResistHandlerOption(pr string) HandlerOption
- func ResolverHandlerOption(resolver Resolver) HandlerOption
- func RetryHandlerOption(retries int) HandlerOption
- func StrategyHandlerOption(strategy Strategy) HandlerOption
- func TLSConfigHandlerOption(config *tls.Config) HandlerOption
- func TimeoutHandlerOption(timeout time.Duration) 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 Host
- type Hosts
- 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 Matcher
- type NameServer
- type Node
- type NodeGroup
- func (group *NodeGroup) AddNode(node ...Node)
- func (group *NodeGroup) GetNode(i int) Node
- func (group *NodeGroup) MarkDeadNode(nid int)
- func (group *NodeGroup) Next() (node Node, err error)
- func (group *NodeGroup) Nodes() []Node
- func (group *NodeGroup) ResetDeadNode(nid int)
- func (group *NodeGroup) SetNodes(nodes ...Node)
- func (group *NodeGroup) SetSelector(selector NodeSelector, opts ...SelectOption)
- type NodeSelector
- type NopLogger
- type PasswordCallbackFunc
- type Permission
- type Permissions
- type PortRange
- type PortSet
- type QUICConfig
- type RandomStrategy
- type ReloadResolver
- type Reloader
- type Resolver
- type RoundStrategy
- type SSHConfig
- type SelectOption
- type SelectOptions
- type Server
- type ServerOption
- type ServerOptions
- 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.6.1"
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 ( // DefaultResolverTimeout is the default timeout for name resolution. DefaultResolverTimeout = 30 * time.Second // DefaultResolverTTL is the default cache TTL for name resolution. DefaultResolverTTL = 60 * time.Second )
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 (
// KCPSalt is the default salt for KCP cipher.
KCPSalt = "kcp-go"
)
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.
func PeriodReload ¶
PeriodReload reloads the config periodically according to the period of the reloader.
Types ¶
type Bypass ¶
type Bypass struct {
// contains filtered or unexported fields
}
Bypass is a filter for address (IP or domain). It contains a list of matchers.
func NewBypass ¶
NewBypass creates and initializes a new Bypass using matchers as its match rules. The rules will be reversed if the reversed is true.
func NewBypassPatterns ¶
NewBypassPatterns creates and initializes a new Bypass using matcher patterns as its match rules. The rules will be reversed if the reverse is true.
func (*Bypass) AddMatchers ¶
AddMatchers appends matchers to the bypass matcher list.
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 ¶
func (c *Chain) Conn(opts ...ChainOption) (conn net.Conn, err error)
Conn obtains a handshaked connection to the last node of the chain.
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 ChainOption ¶
type ChainOption func(opts *ChainOptions)
ChainOption allows a common way to set chain options.
func HostsChainOption ¶
func HostsChainOption(hosts *Hosts) ChainOption
HostsChainOption specifies the hosts used by Chain.Dial.
func ResolverChainOption ¶
func ResolverChainOption(resolver Resolver) ChainOption
ResolverChainOption specifies the Resolver used by Chain.Dial.
func RetryChainOption ¶
func RetryChainOption(retries int) ChainOption
RetryChainOption specifies the times of retry used by Chain.Dial.
func TimeoutChainOption ¶
func TimeoutChainOption(timeout time.Duration) ChainOption
TimeoutChainOption specifies the timeout used by Chain.Dial.
type ChainOptions ¶
ChainOptions holds options for Chain.
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 ConnectOption ¶
type ConnectOption func(opts *ConnectOptions)
ConnectOption allows a common way to set ConnectOptions.
func AddrConnectOption ¶
func AddrConnectOption(addr string) ConnectOption
AddrConnectOption specifies the corresponding address of the target.
type ConnectOptions ¶
type ConnectOptions struct {
Addr string
}
ConnectOptions describes the options for Connector.Connect.
type Connector ¶
type Connector interface {
Connect(conn net.Conn, addr string, options ...ConnectOption) (net.Conn, error)
}
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 DialOptions.
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 Transporter.Dial.
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 ¶
type Handler interface { Init(options ...HandlerOption) Handle(net.Conn) }
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. NOTE: as of 2.6, remote address can be a comma-separated address list.
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. NOTE: as of 2.6, remote address can be a comma-separated address list.
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. NOTE: as of 2.6, remote address can be a comma-separated address list.
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. NOTE: as of 2.6, remote address can be a comma-separated address list.
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 BypassHandlerOption ¶
func BypassHandlerOption(bypass *Bypass) HandlerOption
BypassHandlerOption sets the bypass option of HandlerOptions.
func ChainHandlerOption ¶
func ChainHandlerOption(chain *Chain) HandlerOption
ChainHandlerOption sets the Chain option of HandlerOptions.
func HostsHandlerOption ¶
func HostsHandlerOption(hosts *Hosts) HandlerOption
HostsHandlerOption sets the Hosts option of HandlerOptions.
func ProbeResistHandlerOption ¶
func ProbeResistHandlerOption(pr string) HandlerOption
ProbeResistHandlerOption adds the probe resistance for HTTP proxy.
func ResolverHandlerOption ¶
func ResolverHandlerOption(resolver Resolver) HandlerOption
ResolverHandlerOption sets the resolver option of HandlerOptions.
func RetryHandlerOption ¶
func RetryHandlerOption(retries int) HandlerOption
RetryHandlerOption sets the retry option of HandlerOptions.
func StrategyHandlerOption ¶
func StrategyHandlerOption(strategy Strategy) HandlerOption
StrategyHandlerOption sets the strategy option of HandlerOptions.
func TLSConfigHandlerOption ¶
func TLSConfigHandlerOption(config *tls.Config) HandlerOption
TLSConfigHandlerOption sets the TLSConfig option of HandlerOptions.
func TimeoutHandlerOption ¶
func TimeoutHandlerOption(timeout time.Duration) HandlerOption
TimeoutHandlerOption sets the timeout 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 Strategy Strategy Bypass *Bypass Retries int Timeout time.Duration Resolver Resolver Hosts *Hosts ProbeResist string }
HandlerOptions describes the options for Handler.
type HandshakeOption ¶
type HandshakeOption func(opts *HandshakeOptions)
HandshakeOption allows a common way to set HandshakeOptions.
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 Hosts ¶
type Hosts struct {
// contains filtered or unexported fields
}
Hosts is a static table lookup for hostnames. For each host a single line should be present with the following information: IP_address canonical_hostname [aliases...] Fields of the entry are separated by any number of blanks and/or tab characters. Text from a "#" character until the end of the line is a comment, and is ignored.
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 Matcher ¶
Matcher is a generic pattern matcher, it gives the match result of the given pattern for specific v.
func CIDRMatcher ¶
CIDRMatcher creates a Matcher for a specific CIDR notation IP address.
func DomainMatcher ¶
DomainMatcher creates a Matcher for a specific domain pattern, the pattern can be a plain domain such as 'example.com', a wildcard such as '*.exmaple.com' or a special wildcard '.example.com'.
func NewMatcher ¶
NewMatcher creates a Matcher for the given pattern. The acutal Matcher depends on the pattern: IP Matcher if pattern is a valid IP address. CIDR Matcher if pattern is a valid CIDR address. Domain Matcher if both of the above are not.
type NameServer ¶
type NameServer struct { Addr string Protocol string Hostname string // for TLS handshake verification }
NameServer is a name server. Currently supported protocol: TCP, UDP and TLS.
func (NameServer) String ¶
func (ns NameServer) String() string
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 Bypass *Bypass // 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 // contains filtered or unexported fields }
NodeGroup is a group of nodes.
func (*NodeGroup) MarkDeadNode ¶
MarkDeadNode marks the node with ID nid status to dead.
func (*NodeGroup) ResetDeadNode ¶
ResetDeadNode resets the node with ID nid status.
func (*NodeGroup) SetSelector ¶
func (group *NodeGroup) SetSelector(selector NodeSelector, opts ...SelectOption)
SetSelector sets node selector with options for the group.
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 ReloadResolver ¶
ReloadResolver is resolover that support live reloading
func NewResolver ¶
func NewResolver(timeout, ttl time.Duration, servers ...NameServer) ReloadResolver
NewResolver create a new Resolver with the given name servers and resolution timeout.
type Resolver ¶
type Resolver interface { // Resolve returns a slice of that host's IPv4 and IPv6 addresses. Resolve(host string) ([]net.IP, error) }
Resolver is a name resolver for domain name. It contains a list of name servers.
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 Server ¶
type Server struct { Listener Listener // contains filtered or unexported fields }
Server is a proxy server.
func (*Server) Init ¶
func (s *Server) Init(opts ...ServerOption)
Init intializes server with given options.
type ServerOption ¶
type ServerOption func(opts *ServerOptions)
ServerOption allows a common way to set server options.
type ServerOptions ¶
type ServerOptions struct {
Bypass *Bypass
}
ServerOptions holds the options for Server.
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.