v2ray-core: github.com/v2ray/v2ray-core/proxy/shadowsocks Index | Files

package shadowsocks

import "github.com/v2ray/v2ray-core/proxy/shadowsocks"

Package shadowsocks provides compatible functionality to Shadowsocks.

Shadowsocks client and server are implemented as outbound and inbound respectively in V2Ray's term.

R.I.P Shadowsocks

Index

Package Files

client.go config.go config.pb.go errors.generated.go protocol.go server.go shadowsocks.go

Constants

const (
    Version = 1
)

Variables

var (
    CipherType_name = map[int32]string{
        0:  "UNKNOWN",
        1:  "AES_128_CFB",
        2:  "AES_256_CFB",
        3:  "CHACHA20",
        4:  "CHACHA20_IETF",
        5:  "AES_128_GCM",
        6:  "AES_256_GCM",
        7:  "CHACHA20_POLY1305",
        8:  "NONE",
    }
    CipherType_value = map[string]int32{
        "UNKNOWN":           0,
        "AES_128_CFB":       1,
        "AES_256_CFB":       2,
        "CHACHA20":          3,
        "CHACHA20_IETF":     4,
        "AES_128_GCM":       5,
        "AES_256_GCM":       6,
        "CHACHA20_POLY1305": 7,
        "NONE":              8,
    }
)

Enum value maps for CipherType.

var File_proxy_shadowsocks_config_proto protoreflect.FileDescriptor

func DecodeUDPPacket Uses

func DecodeUDPPacket(user *protocol.MemoryUser, payload *buf.Buffer) (*protocol.RequestHeader, *buf.Buffer, error)

func DrainConnN Uses

func DrainConnN(reader io.Reader, n int) error

func EncodeUDPPacket Uses

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

func ReadTCPResponse Uses

func ReadTCPResponse(user *protocol.MemoryUser, reader io.Reader) (buf.Reader, error)

func ReadTCPSession Uses

func ReadTCPSession(user *protocol.MemoryUser, reader io.Reader) (*protocol.RequestHeader, buf.Reader, error)

ReadTCPSession reads a Shadowsocks TCP session from the given reader, returns its header and remaining parts.

func WriteTCPRequest Uses

func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)

WriteTCPRequest writes Shadowsocks request into the given writer, and returns a writer for body.

func WriteTCPResponse Uses

func WriteTCPResponse(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)

type AEADCipher Uses

type AEADCipher struct {
    KeyBytes        int32
    IVBytes         int32
    AEADAuthCreator func(key []byte) cipher.AEAD
}

func (*AEADCipher) DecodePacket Uses

func (c *AEADCipher) DecodePacket(key []byte, b *buf.Buffer) error

func (*AEADCipher) EncodePacket Uses

func (c *AEADCipher) EncodePacket(key []byte, b *buf.Buffer) error

func (*AEADCipher) IVSize Uses

func (c *AEADCipher) IVSize() int32

func (*AEADCipher) IsAEAD Uses

func (*AEADCipher) IsAEAD() bool

func (*AEADCipher) KeySize Uses

func (c *AEADCipher) KeySize() int32

func (*AEADCipher) NewDecryptionReader Uses

func (c *AEADCipher) NewDecryptionReader(key []byte, iv []byte, reader io.Reader) (buf.Reader, error)

func (*AEADCipher) NewEncryptionWriter Uses

func (c *AEADCipher) NewEncryptionWriter(key []byte, iv []byte, writer io.Writer) (buf.Writer, error)

type Account Uses

type Account struct {
    Password   string     `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"`
    CipherType CipherType `protobuf:"varint,2,opt,name=cipher_type,json=cipherType,proto3,enum=v2ray.core.proxy.shadowsocks.CipherType" json:"cipher_type,omitempty"`
    // contains filtered or unexported fields
}

func (*Account) AsAccount Uses

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

AsAccount implements protocol.AsAccount.

func (*Account) Descriptor Uses

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

Deprecated: Use Account.ProtoReflect.Descriptor instead.

func (*Account) GetCipherType Uses

func (x *Account) GetCipherType() CipherType

func (*Account) GetPassword Uses

func (x *Account) GetPassword() string

func (*Account) ProtoMessage Uses

func (*Account) ProtoMessage()

func (*Account) ProtoReflect Uses

func (x *Account) ProtoReflect() protoreflect.Message

func (*Account) Reset Uses

func (x *Account) Reset()

func (*Account) String Uses

func (x *Account) String() string

type AesCfb Uses

type AesCfb struct {
    KeyBytes int32
}

AesCfb represents all AES-CFB ciphers.

func (*AesCfb) DecodePacket Uses

func (v *AesCfb) DecodePacket(key []byte, b *buf.Buffer) error

func (*AesCfb) EncodePacket Uses

func (v *AesCfb) EncodePacket(key []byte, b *buf.Buffer) error

func (*AesCfb) IVSize Uses

func (v *AesCfb) IVSize() int32

func (*AesCfb) IsAEAD Uses

func (*AesCfb) IsAEAD() bool

func (*AesCfb) KeySize Uses

func (v *AesCfb) KeySize() int32

func (*AesCfb) NewDecryptionReader Uses

func (v *AesCfb) NewDecryptionReader(key []byte, iv []byte, reader io.Reader) (buf.Reader, error)

func (*AesCfb) NewEncryptionWriter Uses

func (v *AesCfb) NewEncryptionWriter(key []byte, iv []byte, writer io.Writer) (buf.Writer, error)

type ChaCha20 Uses

type ChaCha20 struct {
    IVBytes int32
}

func (*ChaCha20) DecodePacket Uses

func (v *ChaCha20) DecodePacket(key []byte, b *buf.Buffer) error

func (*ChaCha20) EncodePacket Uses

func (v *ChaCha20) EncodePacket(key []byte, b *buf.Buffer) error

func (*ChaCha20) IVSize Uses

func (v *ChaCha20) IVSize() int32

func (*ChaCha20) IsAEAD Uses

func (*ChaCha20) IsAEAD() bool

func (*ChaCha20) KeySize Uses

func (v *ChaCha20) KeySize() int32

func (*ChaCha20) NewDecryptionReader Uses

func (v *ChaCha20) NewDecryptionReader(key []byte, iv []byte, reader io.Reader) (buf.Reader, error)

func (*ChaCha20) NewEncryptionWriter Uses

func (v *ChaCha20) NewEncryptionWriter(key []byte, iv []byte, writer io.Writer) (buf.Writer, error)

type Cipher Uses

type Cipher interface {
    KeySize() int32
    IVSize() int32
    NewEncryptionWriter(key []byte, iv []byte, writer io.Writer) (buf.Writer, error)
    NewDecryptionReader(key []byte, iv []byte, reader io.Reader) (buf.Reader, error)
    IsAEAD() bool
    EncodePacket(key []byte, b *buf.Buffer) error
    DecodePacket(key []byte, b *buf.Buffer) error
}

Cipher is an interface for all Shadowsocks ciphers.

type CipherType Uses

type CipherType int32
const (
    CipherType_UNKNOWN           CipherType = 0
    CipherType_AES_128_CFB       CipherType = 1
    CipherType_AES_256_CFB       CipherType = 2
    CipherType_CHACHA20          CipherType = 3
    CipherType_CHACHA20_IETF     CipherType = 4
    CipherType_AES_128_GCM       CipherType = 5
    CipherType_AES_256_GCM       CipherType = 6
    CipherType_CHACHA20_POLY1305 CipherType = 7
    CipherType_NONE              CipherType = 8
)

func (CipherType) Descriptor Uses

func (CipherType) Descriptor() protoreflect.EnumDescriptor

func (CipherType) Enum Uses

func (x CipherType) Enum() *CipherType

func (CipherType) EnumDescriptor Uses

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

Deprecated: Use CipherType.Descriptor instead.

func (CipherType) Number Uses

func (x CipherType) Number() protoreflect.EnumNumber

func (CipherType) String Uses

func (x CipherType) String() string

func (CipherType) Type Uses

func (CipherType) Type() protoreflect.EnumType

type Client Uses

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

Client is a inbound handler for Shadowsocks protocol

func NewClient Uses

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

NewClient create a new Shadowsocks client.

func (*Client) Process Uses

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

Process implements OutboundHandler.Process().

type ClientConfig Uses

type ClientConfig struct {
    Server []*protocol.ServerEndpoint `protobuf:"bytes,1,rep,name=server,proto3" json:"server,omitempty"`
    // contains filtered or unexported fields
}

func (*ClientConfig) Descriptor Uses

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

Deprecated: Use ClientConfig.ProtoReflect.Descriptor instead.

func (*ClientConfig) GetServer Uses

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

func (*ClientConfig) ProtoMessage Uses

func (*ClientConfig) ProtoMessage()

func (*ClientConfig) ProtoReflect Uses

func (x *ClientConfig) ProtoReflect() protoreflect.Message

func (*ClientConfig) Reset Uses

func (x *ClientConfig) Reset()

func (*ClientConfig) String Uses

func (x *ClientConfig) String() string

type MemoryAccount Uses

type MemoryAccount struct {
    Cipher Cipher
    Key    []byte
}

MemoryAccount is an account type converted from Account.

func (*MemoryAccount) Equals Uses

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

Equals implements protocol.Account.Equals().

type NoneCipher Uses

type NoneCipher struct{}

func (NoneCipher) DecodePacket Uses

func (NoneCipher) DecodePacket(key []byte, b *buf.Buffer) error

func (NoneCipher) EncodePacket Uses

func (NoneCipher) EncodePacket(key []byte, b *buf.Buffer) error

func (NoneCipher) IVSize Uses

func (NoneCipher) IVSize() int32

func (NoneCipher) IsAEAD Uses

func (NoneCipher) IsAEAD() bool

func (NoneCipher) KeySize Uses

func (NoneCipher) KeySize() int32

func (NoneCipher) NewDecryptionReader Uses

func (NoneCipher) NewDecryptionReader(key []byte, iv []byte, reader io.Reader) (buf.Reader, error)

func (NoneCipher) NewEncryptionWriter Uses

func (NoneCipher) NewEncryptionWriter(key []byte, iv []byte, writer io.Writer) (buf.Writer, error)

type Server Uses

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

func NewServer Uses

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

NewServer create a new Shadowsocks server.

func (*Server) Network Uses

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

func (*Server) Process Uses

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

type ServerConfig Uses

type ServerConfig struct {

    // UdpEnabled specified whether or not to enable UDP for Shadowsocks.
    // Deprecated. Use 'network' field.
    //
    // Deprecated: Do not use.
    UdpEnabled bool           `protobuf:"varint,1,opt,name=udp_enabled,json=udpEnabled,proto3" json:"udp_enabled,omitempty"`
    User       *protocol.User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
    Network    []net.Network  `protobuf:"varint,3,rep,packed,name=network,proto3,enum=v2ray.core.common.net.Network" json:"network,omitempty"`
    // contains filtered or unexported fields
}

func (*ServerConfig) Descriptor Uses

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

Deprecated: Use ServerConfig.ProtoReflect.Descriptor instead.

func (*ServerConfig) GetNetwork Uses

func (x *ServerConfig) GetNetwork() []net.Network

func (*ServerConfig) GetUdpEnabled Uses

func (x *ServerConfig) GetUdpEnabled() bool

Deprecated: Do not use.

func (*ServerConfig) GetUser Uses

func (x *ServerConfig) GetUser() *protocol.User

func (*ServerConfig) ProtoMessage Uses

func (*ServerConfig) ProtoMessage()

func (*ServerConfig) ProtoReflect Uses

func (x *ServerConfig) ProtoReflect() protoreflect.Message

func (*ServerConfig) Reset Uses

func (x *ServerConfig) Reset()

func (*ServerConfig) String Uses

func (x *ServerConfig) String() string

type UDPReader Uses

type UDPReader struct {
    Reader io.Reader
    User   *protocol.MemoryUser
}

func (*UDPReader) ReadMultiBuffer Uses

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

type UDPWriter Uses

type UDPWriter struct {
    Writer  io.Writer
    Request *protocol.RequestHeader
}

func (*UDPWriter) Write Uses

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

Write implements io.Writer.

Package shadowsocks imports 40 packages (graph) and is imported by 2 packages. Updated 2020-10-27. Refresh now. Tools for package owners.