Documentation

Overview

    Package socks provides implements of Socks protocol 4, 4a and 5.

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var AuthType_name = map[int32]string{
    	0: "NO_AUTH",
    	1: "PASSWORD",
    }
    View Source
    var AuthType_value = map[string]int32{
    	"NO_AUTH":  0,
    	"PASSWORD": 1,
    }

    Functions

    func ClientHandshake

    func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error)

    func DecodeUDPPacket

    func DecodeUDPPacket(packet *buf.Buffer) (*protocol.RequestHeader, error)

    func EncodeUDPPacket

    func EncodeUDPPacket(request *protocol.RequestHeader, data []byte) (*buf.Buffer, error)

    func ReadUntilNull

    func ReadUntilNull(reader io.Reader) (string, error)

      ReadUntilNull reads content from given reader, until a null (0x00) byte.

      func ReadUsernamePassword

      func ReadUsernamePassword(reader io.Reader) (string, string, error)

        ReadUsernamePassword reads Socks 5 username/password message from the given reader. +----+------+----------+------+----------+ |VER | ULEN | UNAME | PLEN | PASSWD | +----+------+----------+------+----------+ | 1 | 1 | 1 to 255 | 1 | 1 to 255 | +----+------+----------+------+----------+

        Types

        type Account

        type Account struct {
        	Username             string   `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
        	Password             string   `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
        	XXX_NoUnkeyedLiteral struct{} `json:"-"`
        	XXX_unrecognized     []byte   `json:"-"`
        	XXX_sizecache        int32    `json:"-"`
        }

          Account represents a Socks account.

          func (*Account) AsAccount

          func (a *Account) AsAccount() (protocol.Account, error)

          func (*Account) Descriptor

          func (*Account) Descriptor() ([]byte, []int)

          func (*Account) Equals

          func (a *Account) Equals(another protocol.Account) bool

          func (*Account) GetPassword

          func (m *Account) GetPassword() string

          func (*Account) GetUsername

          func (m *Account) GetUsername() string

          func (*Account) ProtoMessage

          func (*Account) ProtoMessage()

          func (*Account) Reset

          func (m *Account) Reset()

          func (*Account) String

          func (m *Account) String() string

          func (*Account) XXX_DiscardUnknown

          func (m *Account) XXX_DiscardUnknown()

          func (*Account) XXX_Marshal

          func (m *Account) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

          func (*Account) XXX_Merge

          func (m *Account) XXX_Merge(src proto.Message)

          func (*Account) XXX_Size

          func (m *Account) XXX_Size() int

          func (*Account) XXX_Unmarshal

          func (m *Account) XXX_Unmarshal(b []byte) error

          type AuthType

          type AuthType int32

            AuthType is the authentication type of Socks proxy.

            const (
            	// NO_AUTH is for anounymous authentication.
            	AuthType_NO_AUTH AuthType = 0
            	// PASSWORD is for username/password authentication.
            	AuthType_PASSWORD AuthType = 1
            )

            func (AuthType) EnumDescriptor

            func (AuthType) EnumDescriptor() ([]byte, []int)

            func (AuthType) String

            func (x AuthType) String() string

            type Client

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

              Client is a Socks5 client.

              func NewClient

              func NewClient(ctx context.Context, config *ClientConfig) (*Client, error)

                NewClient create a new Socks5 client based on the given config.

                func (*Client) Process

                func (c *Client) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error

                  Process implements proxy.Outbound.Process.

                  type ClientConfig

                  type ClientConfig struct {
                  	// Sever is a list of Socks server addresses.
                  	Server               []*protocol.ServerEndpoint `protobuf:"bytes,1,rep,name=server,proto3" json:"server,omitempty"`
                  	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
                  	XXX_unrecognized     []byte                     `json:"-"`
                  	XXX_sizecache        int32                      `json:"-"`
                  }

                    ClientConfig is the protobuf config for Socks client.

                    func (*ClientConfig) Descriptor

                    func (*ClientConfig) Descriptor() ([]byte, []int)

                    func (*ClientConfig) GetServer

                    func (m *ClientConfig) GetServer() []*protocol.ServerEndpoint

                    func (*ClientConfig) ProtoMessage

                    func (*ClientConfig) ProtoMessage()

                    func (*ClientConfig) Reset

                    func (m *ClientConfig) Reset()

                    func (*ClientConfig) String

                    func (m *ClientConfig) String() string

                    func (*ClientConfig) XXX_DiscardUnknown

                    func (m *ClientConfig) XXX_DiscardUnknown()

                    func (*ClientConfig) XXX_Marshal

                    func (m *ClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                    func (*ClientConfig) XXX_Merge

                    func (m *ClientConfig) XXX_Merge(src proto.Message)

                    func (*ClientConfig) XXX_Size

                    func (m *ClientConfig) XXX_Size() int

                    func (*ClientConfig) XXX_Unmarshal

                    func (m *ClientConfig) XXX_Unmarshal(b []byte) error

                    type Server

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

                      Server is a SOCKS 5 proxy server

                      func NewServer

                      func NewServer(ctx context.Context, config *ServerConfig) (*Server, error)

                        NewServer creates a new Server object.

                        func (*Server) Network

                        func (s *Server) Network() []net.Network

                          Network implements proxy.Inbound.

                          func (*Server) Process

                          func (s *Server) Process(ctx context.Context, network net.Network, conn internet.Connection, dispatcher routing.Dispatcher) error

                            Process implements proxy.Inbound.

                            type ServerConfig

                            type ServerConfig struct {
                            	AuthType             AuthType          `protobuf:"varint,1,opt,name=auth_type,json=authType,proto3,enum=v2ray.core.proxy.socks.AuthType" json:"auth_type,omitempty"`
                            	Accounts             map[string]string `` /* 157-byte string literal not displayed */
                            	Address              *net.IPOrDomain   `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
                            	UdpEnabled           bool              `protobuf:"varint,4,opt,name=udp_enabled,json=udpEnabled,proto3" json:"udp_enabled,omitempty"`
                            	Timeout              uint32            `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"` // Deprecated: Do not use.
                            	UserLevel            uint32            `protobuf:"varint,6,opt,name=user_level,json=userLevel,proto3" json:"user_level,omitempty"`
                            	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
                            	XXX_unrecognized     []byte            `json:"-"`
                            	XXX_sizecache        int32             `json:"-"`
                            }

                              ServerConfig is the protobuf config for Socks server.

                              func (*ServerConfig) Descriptor

                              func (*ServerConfig) Descriptor() ([]byte, []int)

                              func (*ServerConfig) GetAccounts

                              func (m *ServerConfig) GetAccounts() map[string]string

                              func (*ServerConfig) GetAddress

                              func (m *ServerConfig) GetAddress() *net.IPOrDomain

                              func (*ServerConfig) GetAuthType

                              func (m *ServerConfig) GetAuthType() AuthType

                              func (*ServerConfig) GetTimeout

                              func (m *ServerConfig) GetTimeout() uint32

                                Deprecated: Do not use.

                                func (*ServerConfig) GetUdpEnabled

                                func (m *ServerConfig) GetUdpEnabled() bool

                                func (*ServerConfig) GetUserLevel

                                func (m *ServerConfig) GetUserLevel() uint32

                                func (*ServerConfig) HasAccount

                                func (c *ServerConfig) HasAccount(username, password string) bool

                                func (*ServerConfig) ProtoMessage

                                func (*ServerConfig) ProtoMessage()

                                func (*ServerConfig) Reset

                                func (m *ServerConfig) Reset()

                                func (*ServerConfig) String

                                func (m *ServerConfig) String() string

                                func (*ServerConfig) XXX_DiscardUnknown

                                func (m *ServerConfig) XXX_DiscardUnknown()

                                func (*ServerConfig) XXX_Marshal

                                func (m *ServerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                                func (*ServerConfig) XXX_Merge

                                func (m *ServerConfig) XXX_Merge(src proto.Message)

                                func (*ServerConfig) XXX_Size

                                func (m *ServerConfig) XXX_Size() int

                                func (*ServerConfig) XXX_Unmarshal

                                func (m *ServerConfig) XXX_Unmarshal(b []byte) error

                                type ServerSession

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

                                func (*ServerSession) Handshake

                                func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error)

                                  Handshake performs a Socks4/4a/5 handshake.

                                  type UDPReader

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

                                  func NewUDPReader

                                  func NewUDPReader(reader io.Reader) *UDPReader

                                  func (*UDPReader) ReadMultiBuffer

                                  func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error)

                                  type UDPWriter

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

                                  func NewUDPWriter

                                  func NewUDPWriter(request *protocol.RequestHeader, writer io.Writer) *UDPWriter

                                  func (*UDPWriter) Write

                                  func (w *UDPWriter) Write(b []byte) (int, error)

                                    Write implements io.Writer.