Documentation ¶
Index ¶
- Constants
- Variables
- func SetLogger(l *zap.Logger)
- type Client
- type Handshaker
- type PacketAdapter
- type Service
- func NewTCPShadowsocksNoneService(ssNoneListenAddress string, listenerTFO, dialerTFO bool, client Client) Service
- func NewTCPSimpleHttpConnectService(httpListenAddress string, listenerTFO, dialerTFO bool, client Client) Service
- func NewTCPSimpleSocks5Service(socks5ListenAddress string, enableTCP, enableUDP, listenerTFO, dialerTFO bool, ...) Service
- func NewTCPSimpleTunnelService(tunnelListenAddress string, tunnelRemoteSocksAddr socks.Addr, ...) Service
- func NewUDPShadowsocksNoneService(ssNoneListenAddress string, natTimeout time.Duration, client Client) Service
- func NewUDPSimpleSocks5Service(socks5ListenAddress string, natTimeout time.Duration, client Client) Service
- func NewUDPSimpleTunnelService(tunnelListenAddress string, tunnelRemoteSocksAddr socks.Addr, ...) Service
- type ShadowsocksNoneHandshaker
- type ShadowsocksNonePacketAdapter
- func (p *ShadowsocksNonePacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, socksAddrStart, payloadStart, payloadLength int) (pkt []byte, err error)
- func (p *ShadowsocksNonePacketAdapter) ParsePacket(pkt []byte, start, length int) (payloadStart, payloadLength int, detachedSocksAddr []byte, err error)
- func (p *ShadowsocksNonePacketAdapter) String() string
- type ShadowsocksPacketConn
- type SimpleHttpConnectHandshaker
- type SimpleSocks5Handshaker
- type SimpleSocks5PacketAdapter
- func (p *SimpleSocks5PacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, socksAddrStart, payloadStart, payloadLength int) (pkt []byte, err error)
- func (p *SimpleSocks5PacketAdapter) ParsePacket(pkt []byte, start, length int) (payloadStart, payloadLength int, detachedSocksAddr []byte, err error)
- func (p *SimpleSocks5PacketAdapter) String() string
- type SimpleTunnelHandshaker
- type SimpleTunnelPacketAdapter
- func (p *SimpleTunnelPacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, _, payloadStart, payloadLength int) (pkt []byte, err error)
- func (p *SimpleTunnelPacketAdapter) ParsePacket(_ []byte, start, length int) (payloadStart, payloadLength int, detachedSocksAddr []byte, err error)
- func (p *SimpleTunnelPacketAdapter) String() string
- type TCPTunnel
- type UDPTunnel
Constants ¶
const ( // Defines the space to reserve in front of a slice for making an outgoing Shadowsocks client message. ShadowsocksPacketConnFrontReserve = 24 + ss.UDPClientMessageHeaderFixedLength + ss.MaxPaddingLength + socks.MaxAddrLen )
Variables ¶
var (
ErrRepeatedSalt = errors.New("server stream has repeated salt")
)
Functions ¶
Types ¶
type Client ¶
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` is the target socks address. DialTCP(laddr *net.TCPAddr, raddr []byte, dialerTFO bool) (onet.DuplexConn, error) // ListenUDP starts a new Shadowsocks UDP session and returns a connection that // can be used to relay UDP packets though the proxy. // `laddr` is a local bind address, a local address is automatically chosen if nil. // For Shadowsocks 2022, this encapsulation does not support multiplexing several sessions // into one proxy connection. ListenUDP(laddr *net.UDPAddr) (ShadowsocksPacketConn, error) // Cipher gets the underlying Shadowsocks cipher used by the client. Cipher() *ss.Cipher }
Client is a client for Shadowsocks TCP and UDP connections.
type Handshaker ¶
Handshaker handles the handshake with clientConn for TCPTunnel.
An implementation of Handshaker must be thread-safe. Handshake(1) may be called simultaneously from different goroutines.
If both the returned socks address and error are nil, the connection is kept open until EOF.
type PacketAdapter ¶
type PacketAdapter interface { String() string // ParsePacket parses an incoming packet and returns payload start index, payload length, // a detached socks address (if applicable), or an error. // // The detached socks address is only returned when the payload does not start with a socks address. ParsePacket(pkt []byte, start, length int) (payloadStart, payloadLength int, detachedSocksAddr []byte, err error) // EncapsulatePacket encapsulates the decrypted packet from proxy // into a new form so it's ready to be sent on the local interface. // The encapsulation must not extend beyond the range of the full decrypted packet. EncapsulatePacket(decryptedFullPacket []byte, socksAddrStart, payloadStart, payloadLength int) (pkt []byte, err error) }
PacketAdapter translates packets between a local interface and the proxy interface.
type Service ¶
type Service interface { // String returns the service's name. // This method may be called on a nil pointer. String() string // Start starts the service. Start() error // Stop stops the service. Stop() error }
Service defines the management interface for client services.
func NewTCPSimpleHttpConnectService ¶ added in v0.3.0
type ShadowsocksNoneHandshaker ¶
type ShadowsocksNoneHandshaker struct{}
ShadowsocksNoneHandshaker implements the 'none' mode of Shadowsocks.
func (*ShadowsocksNoneHandshaker) String ¶ added in v0.2.0
func (h *ShadowsocksNoneHandshaker) String() string
type ShadowsocksNonePacketAdapter ¶
type ShadowsocksNonePacketAdapter struct{}
ShadowsocksNonePacketAdapter implements the 'none' mode of Shadowsocks.
func (*ShadowsocksNonePacketAdapter) EncapsulatePacket ¶
func (p *ShadowsocksNonePacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, socksAddrStart, payloadStart, payloadLength int) (pkt []byte, err error)
func (*ShadowsocksNonePacketAdapter) ParsePacket ¶
func (*ShadowsocksNonePacketAdapter) String ¶ added in v0.2.0
func (p *ShadowsocksNonePacketAdapter) String() string
type ShadowsocksPacketConn ¶
type ShadowsocksPacketConn interface { net.PacketConn // RemoteAddr returns the remote proxy's address. RemoteAddr() net.Addr // ReadFromZeroCopy eliminates copying by requiring that a big enough buffer is passed for reading. ReadFromZeroCopy(b []byte) (socksAddrStart, payloadStart, payloadLength int, err error) // WriteToZeroCopy minimizes copying by requiring that enough space is reserved in b. // The socks address is still being copied into the buffer. // // You should reserve 24 + ss.UDPClientMessageHeaderFixedLength + ss.MaxPaddingLength + socks.MaxAddrLen // in the beginning, and cipher.TagSize() in the end. // // start points to where the actual payload (excluding header) starts. // length is payload length. WriteToZeroCopy(b []byte, start, length int, socksAddr []byte) (n int, err error) }
ShadowsocksPacketConn adds zero-copy methods for reading from and writing to a Shadowsocks UDP proxy.
type SimpleHttpConnectHandshaker ¶ added in v0.3.0
type SimpleHttpConnectHandshaker struct{}
func (*SimpleHttpConnectHandshaker) String ¶ added in v0.3.0
func (h *SimpleHttpConnectHandshaker) String() string
type SimpleSocks5Handshaker ¶
type SimpleSocks5Handshaker struct {
// contains filtered or unexported fields
}
SimpleSocks5Handshaker is a minimal implementation of SOCKS5 server. SOCKS5 spec: https://datatracker.ietf.org/doc/html/rfc1928
func NewSimpleSocks5Handshaker ¶
func NewSimpleSocks5Handshaker(enableTCP, enableUDP bool) *SimpleSocks5Handshaker
func (*SimpleSocks5Handshaker) String ¶ added in v0.2.0
func (h *SimpleSocks5Handshaker) String() string
type SimpleSocks5PacketAdapter ¶
type SimpleSocks5PacketAdapter struct{}
SimpleSocks5PacketAdapter is a minimal implementation of SOCKS5 UDP server. It unconditionally accepts SOCKS5 UDP packets, no matter a corresponding UDP association exists or not.
func (*SimpleSocks5PacketAdapter) EncapsulatePacket ¶
func (p *SimpleSocks5PacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, socksAddrStart, payloadStart, payloadLength int) (pkt []byte, err error)
func (*SimpleSocks5PacketAdapter) ParsePacket ¶
func (*SimpleSocks5PacketAdapter) String ¶ added in v0.2.0
func (p *SimpleSocks5PacketAdapter) String() string
type SimpleTunnelHandshaker ¶
type SimpleTunnelHandshaker struct {
// contains filtered or unexported fields
}
SimpleTunnelHandshaker simply tunnels traffic between clientConn and proxyConn.
func NewSimpleTunnelHandshaker ¶
func NewSimpleTunnelHandshaker(remoteSocksAddr socks.Addr) *SimpleTunnelHandshaker
func (*SimpleTunnelHandshaker) String ¶ added in v0.2.0
func (h *SimpleTunnelHandshaker) String() string
type SimpleTunnelPacketAdapter ¶
type SimpleTunnelPacketAdapter struct {
// contains filtered or unexported fields
}
SimpleTunnelPacketAdapter simply relays packets between clientConn and proxyConn.
func NewSimpleTunnelPacketAdapter ¶
func NewSimpleTunnelPacketAdapter(remoteSocksAddr socks.Addr) *SimpleTunnelPacketAdapter
func (*SimpleTunnelPacketAdapter) EncapsulatePacket ¶
func (p *SimpleTunnelPacketAdapter) EncapsulatePacket(decryptedFullPacket []byte, _, payloadStart, payloadLength int) (pkt []byte, err error)
func (*SimpleTunnelPacketAdapter) ParsePacket ¶
func (*SimpleTunnelPacketAdapter) String ¶ added in v0.2.0
func (p *SimpleTunnelPacketAdapter) String() string