shadowsocks

package
v1.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 16, 2020 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const MaxCapacity = 20_000

MaxCapacity is the largest allowed size of ReplayCache.

Capacities in excess of 20,000 are not recommended, due to the false positive rate of up to 2 * capacity / 2^32 = 1 / 100,000. If larger capacities are desired, the key type should be changed to uint64.

Variables

This section is empty.

Functions

func MakeTestPayload added in v1.0.3

func MakeTestPayload(size int) []byte

func NewAddr added in v1.0.6

func NewAddr(address, network string) net.Addr

NewAddr returns a net.Addr that holds an address of the form `host:port` with a domain name or IP as host. Used for SOCKS addressing.

Types

type CipherEntry added in v1.0.3

type CipherEntry struct {
	ID     string
	Cipher shadowaead.Cipher
	// contains filtered or unexported fields
}

CipherEntry holds a Cipher with an identifier. The public fields are constant, but lastAddress is mutable under cipherList.mu.

type CipherList added in v1.0.3

type CipherList interface {
	PushBack(id string, cipher shadowaead.Cipher) *list.Element
	SafeSnapshotForClientIP(clientIP net.IP) []*list.Element
	SafeMarkUsedByClientIP(e *list.Element, clientIP net.IP)
}

CipherList is a list of CipherEntry elements that allows for thread-safe snapshotting and moving to front.

func MakeTestCiphers added in v1.0.3

func MakeTestCiphers(numCiphers int) (CipherList, error)

func NewCipherList added in v1.0.3

func NewCipherList() CipherList

NewCipherList creates an empty CipherList

type Client added in v1.0.6

type Client interface {
	// DialTCP connects to `raddr` over TCP though a Shadowsocks proxy.
	// `laddr` is a local bind address, a local address is automatically chosen if nil.
	// `raddr` has the form `host:port`, where `host` can be a domain name or IP address.
	DialTCP(laddr *net.TCPAddr, raddr string) (onet.DuplexConn, error)

	// ListenUDP relays UDP packets though a Shadowsocks proxy.
	// `laddr` is a local bind address, a local address is automatically chosen if nil.
	ListenUDP(laddr *net.UDPAddr) (net.PacketConn, error)
}

Client is a client for Shadowsocks TCP and UDP connections.

func NewClient added in v1.0.6

func NewClient(host string, port int, password, cipher string) (Client, error)

NewClient creates a client that routes connections to a Shadowsocks proxy listening at `host:port`, with authentication parameters `cipher` (AEAD) and `password`. TODO: add a dialer argument to support proxy chaining and transport changes.

type ReplayCache added in v1.0.8

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

ReplayCache allows us to check whether a handshake salt was used within the last `capacity` handshakes. It requires approximately 20*capacity bytes of memory (as measured by BenchmarkReplayCache_Creation).

The nil and zero values represent a cache with capacity 0, i.e. no cache.

func NewReplayCache added in v1.0.8

func NewReplayCache(capacity int) ReplayCache

NewReplayCache returns a fresh ReplayCache that promises to remember at least the most recent `capacity` handshakes.

func (*ReplayCache) Add added in v1.0.8

func (c *ReplayCache) Add(id string, salt []byte) bool

Add a handshake with this key ID and salt to the cache. Returns false if it is already present.

type ShadowsocksReader

type ShadowsocksReader interface {
	io.Reader
	io.WriterTo
}

ShadowsocksReader is an io.Reader that also implements io.WriterTo to allow for piping the data without extra allocations and copies.

func NewShadowsocksReader

func NewShadowsocksReader(reader io.Reader, ssCipher shadowaead.Cipher) ShadowsocksReader

NewShadowsocksReader creates a Reader that decrypts the given Reader using the shadowsocks protocol with the given shadowsocks cipher.

type ShadowsocksWriter

type ShadowsocksWriter interface {
	io.Writer
	io.ReaderFrom
}

ShadowsocksWriter is an io.Writer that also implements io.ReaderFrom to allow for piping the data without extra allocations and copies.

func NewShadowsocksWriter

func NewShadowsocksWriter(writer io.Writer, ssCipher shadowaead.Cipher) ShadowsocksWriter

NewShadowsocksWriter creates a Writer that encrypts the given Writer using the shadowsocks protocol with the given shadowsocks cipher.

type TCPService

type TCPService interface {
	Start()
	Stop() error
}

TCPService is a Shadowsocks TCP service that can be started and stopped.

func NewTCPService

func NewTCPService(listener *net.TCPListener, ciphers *CipherList, replayCache *ReplayCache, m metrics.ShadowsocksMetrics, timeout time.Duration) TCPService

NewTCPService creates a TCPService

type UDPService

type UDPService interface {
	Start()
	Stop() error
}

UDPService is a UDP shadowsocks service that can be started and stopped.

func NewUDPService

func NewUDPService(clientConn net.PacketConn, natTimeout time.Duration, cipherList *CipherList, m metrics.ShadowsocksMetrics) UDPService

NewUDPService creates a UDPService

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL