Documentation ¶
Overview ¶
Package shadowsocks provides compatible functionality to Shadowsocks.
Shadowsocks client and server are implemented as outbound and inbound respectively in V2Ray's term.
Shadowsocks OTA is fully supported. By default both client and server enable OTA, but it can be optionally disabled.
Supperted Ciphers: * AES-256-CFB * AES-128-CFB * Chacha20 * Chacha20-IEFT
R.I.P Shadowsocks
Index ¶
- Constants
- Variables
- func ChunkKeyGenerator(iv []byte) func() []byte
- func DecodeUDPPacket(user *protocol.User, payload *buf.Buffer) (*protocol.RequestHeader, *buf.Buffer, error)
- func EncodeUDPPacket(request *protocol.RequestHeader, payload []byte) (*buf.Buffer, error)
- func HeaderKeyGenerator(key []byte, iv []byte) func() []byte
- func PasswordToCipherKey(password string, keySize int) []byte
- func ReadTCPResponse(user *protocol.User, reader io.Reader) (buf.Reader, error)
- func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHeader, buf.Reader, error)
- func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)
- func WriteTCPResponse(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)
- type Account
- func (v *Account) AsAccount() (protocol.Account, error)
- func (*Account) Descriptor() ([]byte, []int)
- func (v *Account) GetCipher() (Cipher, error)
- func (v *Account) GetCipherKey() []byte
- func (m *Account) GetCipherType() CipherType
- func (m *Account) GetOta() Account_OneTimeAuth
- func (m *Account) GetPassword() string
- func (*Account) ProtoMessage()
- func (m *Account) Reset()
- func (m *Account) String() string
- type Account_OneTimeAuth
- type AesCfb
- type Authenticator
- type ChaCha20
- type ChunkReader
- type ChunkWriter
- type Cipher
- type CipherType
- type Client
- type ClientConfig
- type KeyGenerator
- type Server
- type ServerConfig
- type ShadowsocksAccount
- type UDPReader
- type UDPWriter
Constants ¶
View Source
const ( Version = 1 RequestOptionOneTimeAuth = protocol.RequestOption(101) AddrTypeIPv4 = 1 AddrTypeIPv6 = 4 AddrTypeDomain = 3 )
View Source
const (
// AuthSize is the number of extra bytes for Shadowsocks OTA.
AuthSize = 10
)
Variables ¶
View Source
var Account_OneTimeAuth_name = map[int32]string{
0: "Auto",
1: "Disabled",
2: "Enabled",
}
View Source
var Account_OneTimeAuth_value = map[string]int32{
"Auto": 0,
"Disabled": 1,
"Enabled": 2,
}
View Source
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",
}
View Source
var 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,
}
Functions ¶
func ChunkKeyGenerator ¶ added in v1.9.1
func DecodeUDPPacket ¶
func EncodeUDPPacket ¶
func HeaderKeyGenerator ¶ added in v1.9.1
func PasswordToCipherKey ¶ added in v1.9.1
func ReadTCPResponse ¶
func ReadTCPSession ¶
func WriteTCPRequest ¶
func WriteTCPResponse ¶
Types ¶
type Account ¶
type Account struct { Password string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` CipherType CipherType `` /* 130-byte string literal not displayed */ Ota Account_OneTimeAuth `protobuf:"varint,3,opt,name=ota,enum=v2ray.core.proxy.shadowsocks.Account_OneTimeAuth" json:"ota,omitempty"` }
func (*Account) Descriptor ¶
func (*Account) GetCipherKey ¶
func (*Account) GetCipherType ¶
func (m *Account) GetCipherType() CipherType
func (*Account) GetOta ¶
func (m *Account) GetOta() Account_OneTimeAuth
func (*Account) GetPassword ¶
func (*Account) ProtoMessage ¶
func (*Account) ProtoMessage()
type Account_OneTimeAuth ¶
type Account_OneTimeAuth int32
const ( Account_Auto Account_OneTimeAuth = 0 Account_Disabled Account_OneTimeAuth = 1 Account_Enabled Account_OneTimeAuth = 2 )
func (Account_OneTimeAuth) EnumDescriptor ¶
func (Account_OneTimeAuth) EnumDescriptor() ([]byte, []int)
func (Account_OneTimeAuth) String ¶
func (x Account_OneTimeAuth) String() string
type AesCfb ¶
type AesCfb struct {
KeyBytes int
}
func (*AesCfb) NewDecodingStream ¶ added in v1.9.1
type Authenticator ¶ added in v1.9.1
type Authenticator struct {
// contains filtered or unexported fields
}
func NewAuthenticator ¶ added in v1.9.1
func NewAuthenticator(keygen KeyGenerator) *Authenticator
func (*Authenticator) Authenticate ¶ added in v1.9.1
func (v *Authenticator) Authenticate(data []byte) buf.Supplier
type ChaCha20 ¶
type ChaCha20 struct {
IVBytes int
}
func (*ChaCha20) NewDecodingStream ¶ added in v1.9.1
type ChunkReader ¶ added in v1.9.1
type ChunkReader struct {
// contains filtered or unexported fields
}
func NewChunkReader ¶ added in v1.9.1
func NewChunkReader(reader io.Reader, auth *Authenticator) *ChunkReader
func (*ChunkReader) Read ¶ added in v1.9.1
func (v *ChunkReader) Read() (buf.MultiBuffer, error)
type ChunkWriter ¶
type ChunkWriter struct {
// contains filtered or unexported fields
}
func NewChunkWriter ¶
func NewChunkWriter(writer io.Writer, auth *Authenticator) *ChunkWriter
func (*ChunkWriter) Write ¶
func (w *ChunkWriter) Write(mb buf.MultiBuffer) error
Write implements buf.MultiBufferWriter.
type CipherType ¶
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 )
func (CipherType) EnumDescriptor ¶
func (CipherType) EnumDescriptor() ([]byte, []int)
func (CipherType) String ¶
func (x CipherType) String() string
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a inbound handler for Shadowsocks protocol
type ClientConfig ¶
type ClientConfig struct {
Server []*v2ray_core_common_protocol1.ServerEndpoint `protobuf:"bytes,1,rep,name=server" json:"server,omitempty"`
}
func (*ClientConfig) Descriptor ¶
func (*ClientConfig) Descriptor() ([]byte, []int)
func (*ClientConfig) GetServer ¶
func (m *ClientConfig) GetServer() []*v2ray_core_common_protocol1.ServerEndpoint
func (*ClientConfig) ProtoMessage ¶
func (*ClientConfig) ProtoMessage()
func (*ClientConfig) Reset ¶
func (m *ClientConfig) Reset()
func (*ClientConfig) String ¶
func (m *ClientConfig) String() string
type KeyGenerator ¶ added in v1.9.1
type KeyGenerator func() []byte
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
func NewServer ¶
func NewServer(ctx context.Context, config *ServerConfig) (*Server, error)
NewServer create a new Shadowsocks server.
func (*Server) Network ¶
func (s *Server) Network() net.NetworkList
type ServerConfig ¶
type ServerConfig struct { UdpEnabled bool `protobuf:"varint,1,opt,name=udp_enabled,json=udpEnabled" json:"udp_enabled,omitempty"` User *v2ray_core_common_protocol.User `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"` }
func (*ServerConfig) Descriptor ¶
func (*ServerConfig) Descriptor() ([]byte, []int)
func (*ServerConfig) GetUdpEnabled ¶
func (m *ServerConfig) GetUdpEnabled() bool
func (*ServerConfig) GetUser ¶
func (m *ServerConfig) GetUser() *v2ray_core_common_protocol.User
func (*ServerConfig) ProtoMessage ¶
func (*ServerConfig) ProtoMessage()
func (*ServerConfig) Reset ¶
func (m *ServerConfig) Reset()
func (*ServerConfig) String ¶
func (m *ServerConfig) String() string
type ShadowsocksAccount ¶
type ShadowsocksAccount struct { Cipher Cipher Key []byte OneTimeAuth Account_OneTimeAuth }
Click to show internal directories.
Click to hide internal directories.