Documentation ¶
Overview ¶
Package proxy contains all proxies used by Xray.
To implement an inbound or outbound proxy, one needs to do the following: 1. Implement the interface(s) below. 2. Register a config creator through common.RegisterConfig.
Index ¶
- Constants
- Variables
- func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net.Conn, ...) error
- func ReshapeMultiBuffer(ctx context.Context, buffer buf.MultiBuffer) buf.MultiBuffer
- func UnwrapRawConn(conn net.Conn) (net.Conn, stats.Counter, stats.Counter)
- func XtlsFilterTls(buffer buf.MultiBuffer, trafficState *TrafficState, ctx context.Context)
- func XtlsPadding(b *buf.Buffer, command byte, userUUID *[]byte, longPadding bool, ...) *buf.Buffer
- func XtlsUnpadding(b *buf.Buffer, s *TrafficState, ctx context.Context) *buf.Buffer
- type GetInbound
- type GetOutbound
- type Inbound
- type Outbound
- type TrafficState
- type UserManager
- type VisionReader
- type VisionWriter
Constants ¶
Variables ¶
var ( Tls13SupportedVersions = []byte{0x00, 0x2b, 0x00, 0x02, 0x03, 0x04} TlsClientHandShakeStart = []byte{0x16, 0x03} TlsServerHandShakeStart = []byte{0x16, 0x03, 0x03} TlsApplicationDataStart = []byte{0x17, 0x03, 0x03} Tls13CipherSuiteDic = map[uint16]string{ 0x1301: "TLS_AES_128_GCM_SHA256", 0x1302: "TLS_AES_256_GCM_SHA384", 0x1303: "TLS_CHACHA20_POLY1305_SHA256", 0x1304: "TLS_AES_128_CCM_SHA256", 0x1305: "TLS_AES_128_CCM_8_SHA256", } )
Functions ¶
func CopyRawConnIfExist ¶ added in v1.8.6
func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net.Conn, writer buf.Writer, timer *signal.ActivityTimer, inTimer *signal.ActivityTimer) error
CopyRawConnIfExist use the most efficient copy method. - If caller don't want to turn on splice, do not pass in both reader conn and writer conn - writer are from *transport.Link
func ReshapeMultiBuffer ¶ added in v1.8.6
func ReshapeMultiBuffer(ctx context.Context, buffer buf.MultiBuffer) buf.MultiBuffer
ReshapeMultiBuffer prepare multi buffer for padding structure (max 21 bytes)
func UnwrapRawConn ¶ added in v1.8.6
UnwrapRawConn support unwrap stats, tls, utls, reality and proxyproto conn and get raw tcp conn from it
func XtlsFilterTls ¶ added in v1.8.6
func XtlsFilterTls(buffer buf.MultiBuffer, trafficState *TrafficState, ctx context.Context)
XtlsFilterTls filter and recognize tls 1.3 and other info
func XtlsPadding ¶ added in v1.8.6
func XtlsPadding(b *buf.Buffer, command byte, userUUID *[]byte, longPadding bool, ctx context.Context) *buf.Buffer
XtlsPadding add padding to eliminate length signature during tls handshake
func XtlsUnpadding ¶ added in v1.8.6
XtlsUnpadding remove padding and parse command
Types ¶
type GetInbound ¶
type GetInbound interface {
GetInbound() Inbound
}
type GetOutbound ¶
type GetOutbound interface {
GetOutbound() Outbound
}
type Inbound ¶
type Inbound interface { // Network returns a list of networks that this inbound supports. Connections with not-supported networks will not be passed into Process(). Network() []net.Network // Process processes a connection of given network. If necessary, the Inbound can dispatch the connection to an Outbound. Process(context.Context, net.Network, stat.Connection, routing.Dispatcher) error }
An Inbound processes inbound connections.
type Outbound ¶
type Outbound interface { // Process processes the given connection. The given dialer may be used to dial a system outbound connection. Process(context.Context, *transport.Link, internet.Dialer) error }
An Outbound process outbound connections.
type TrafficState ¶ added in v1.8.6
type TrafficState struct { UserUUID []byte NumberOfPacketToFilter int EnableXtls bool IsTLS12orAbove bool IsTLS bool Cipher uint16 RemainingServerHello int32 // reader link state WithinPaddingBuffers bool ReaderSwitchToDirectCopy bool RemainingCommand int32 RemainingContent int32 RemainingPadding int32 CurrentCommand int // write link state IsPadding bool WriterSwitchToDirectCopy bool }
TrafficState is used to track uplink and downlink of one connection It is used by XTLS to determine if switch to raw copy mode, It is used by Vision to calculate padding
func NewTrafficState ¶ added in v1.8.6
func NewTrafficState(userUUID []byte) *TrafficState
type UserManager ¶
type UserManager interface { // AddUser adds a new user. AddUser(context.Context, *protocol.MemoryUser) error // RemoveUser removes a user by email. RemoveUser(context.Context, string) error }
UserManager is the interface for Inbounds and Outbounds that can manage their users.
type VisionReader ¶ added in v1.8.6
VisionReader is used to read xtls vision protocol Note Vision probably only make sense as the inner most layer of reader, since it need assess traffic state from origin proxy traffic
func NewVisionReader ¶ added in v1.8.6
func NewVisionReader(reader buf.Reader, state *TrafficState, context context.Context) *VisionReader
func (*VisionReader) ReadMultiBuffer ¶ added in v1.8.6
func (w *VisionReader) ReadMultiBuffer() (buf.MultiBuffer, error)
type VisionWriter ¶ added in v1.8.6
VisionWriter is used to write xtls vision protocol Note Vision probably only make sense as the inner most layer of writer, since it need assess traffic state from origin proxy traffic
func NewVisionWriter ¶ added in v1.8.6
func NewVisionWriter(writer buf.Writer, state *TrafficState, context context.Context) *VisionWriter
func (*VisionWriter) WriteMultiBuffer ¶ added in v1.8.6
func (w *VisionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error
Directories ¶
Path | Synopsis |
---|---|
Package blackhole is an outbound handler that blocks all connections.
|
Package blackhole is an outbound handler that blocks all connections. |
Package shadowsocks provides compatible functionality to Shadowsocks.
|
Package shadowsocks provides compatible functionality to Shadowsocks. |
Package socks provides implements of Socks protocol 4, 4a and 5.
|
Package socks provides implements of Socks protocol 4, 4a and 5. |
Package vless contains the implementation of VLess protocol and transportation.
|
Package vless contains the implementation of VLess protocol and transportation. |
Package vmess contains the implementation of VMess protocol and transportation.
|
Package vmess contains the implementation of VMess protocol and transportation. |