Documentation ¶
Index ¶
- Constants
- Variables
- func ParseAddress(address string) (a byte, addr []byte, port []byte, err error)
- func ParseBytesAddress(b []byte) (a byte, addr []byte, port []byte, err error)
- type Client
- type Cmd
- type DatagramUDP
- type DefaultHandle
- type Dialer
- type Handler
- type Negotiate
- type NegotiationReply
- type NegotiationReplyAuth
- type NegotiationRequest
- type NegotiationRequestAuth
- type ReplyTCP
- type RequestTCP
- func (r *RequestTCP) Address() string
- func (r *RequestTCP) RemoteConnect(dial *Dialer, w io.Writer) (rc net.Conn, err error)
- func (r *RequestTCP) ReplyError(rep byte, w io.Writer) error
- func (r *RequestTCP) UDP(cconn net.Conn, proxyAddr *net.UDPAddr) (caddr *net.UDPAddr, err error)
- func (r *RequestTCP) WriteTo(w io.Writer) (int64, error)
- type Server
Constants ¶
View Source
const ( // CmdConnect 是 TCP 命令 CmdConnect byte = 0x01 // CmdBind 是绑定端口命令 CmdBind byte = 0x02 // CmdUDP 是 UDP 命令 CmdUDP byte = 0x03 )
View Source
const ( // MethodNone 是默认方法 MethodNone byte = 0x00 // MethodGSSAPI 是gssapi方法 MethodGSSAPI byte = 0x01 // MUST support // todo // MethodUsernamePassword 是用户名/密码授权方法 MethodUsernamePassword byte = 0x02 // SHOULD support // MethodUnsupportAll 表示不支持所有给定的方法 MethodUnsupportAll byte = 0xFF )
View Source
const ( // ver是socks协议版本 Ver byte = 0x05 // UserPassVer 是用户名/密码授权协议版本 UserPassVer byte = 0x01 // UserPassStatusSuccess 是用户名/密码授权的成功状态 UserPassStatusSuccess byte = 0x00 // UserPassStatusFailure 是用户名/密码授权的失败状态 UserPassStatusFailure byte = 0x01 // just other than 0x00 // ATYPIPv4 是ipv4地址类型 ATYPIPv4 byte = 0x01 // 4 octets // ATYPDomain 是域名地址类型 ATYPDomain byte = 0x03 // The first octet of the address field contains the number of octets of name that follow, there is no terminating NUL octet. // ATYPIPv6 is ipv6 地址类型 ATYPIPv6 byte = 0x04 // 16 octets // RepSuccess 意味着回复成功 RepSuccess byte = 0x00 // RepServerFailure 意味着服务器故障 RepServerFailure byte = 0x01 // RepNotAllowed 表示请求不允许 RepNotAllowed byte = 0x02 // RepNetworkUnreachable 表示网络不可达 RepNetworkUnreachable byte = 0x03 // RepHostUnreachable 表示主机无法访问 RepHostUnreachable byte = 0x04 // RepConnectionRefused 表示连接被拒绝 RepConnectionRefused byte = 0x05 // RepTTLExpired 表示 TTL 已过期 RepTTLExpired byte = 0x06 // RepCommandNotSupported 表示不支持请求命令 RepCommandNotSupported byte = 0x07 // RepAddressNotSupported 表示不支持请求地址 RepAddressNotSupported byte = 0x08 )
Variables ¶
View Source
var ( ErrVersion = errors.New("invalid Version") ErrUserPassVersion = errors.New("invalid Version of Username Password Auth") ErrBadRequest = errors.New("bad Request") ErrEmptyAddr = errors.New("invalid Addr") ErrHandler = errors.New("data handler is not set") ErrUnsupportCmd = errors.New("unsupport Command") ErrUserPassAuth = errors.New("invalid Username or Password for Auth") ErrTCPConnClose = errors.New("TCP connection is closed") ErrBadReply = errors.New("bad Reply") )
View Source
var BuffSize = 32 << 10 // 32k
Functions ¶
func ParseAddress ¶ added in v1.0.6
Types ¶
type Client ¶
type DatagramUDP ¶
type DatagramUDP struct { Rsv []byte // 0x00 0x00 Frag byte Atyp byte DstAddr []byte DstPort []byte // 2 bytes Data []byte }
数据报文是UDP包
func NewRequestUDP ¶ added in v1.0.6
func NewRequestUDP(atyp byte, dstaddr []byte, dstport []byte, data []byte) *DatagramUDP
client/server
+----+------+------+----------+----------+----------+ |RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA | +----+------+------+----------+----------+----------+ | 2 | 1 | 1 | Variable | 2 | Variable | +----+------+------+----------+----------+----------+
func ReadRequestUDP ¶ added in v1.0.6
func ReadRequestUDP(bb []byte) (*DatagramUDP, error)
server/server
+----+------+------+----------+----------+----------+ |RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA | +----+------+------+----------+----------+----------+ | 2 | 1 | 1 | Variable | 2 | Variable | +----+------+------+----------+----------+----------+
func (*DatagramUDP) Address ¶
func (d *DatagramUDP) Address() string
type DefaultHandle ¶
func (*DefaultHandle) TCP ¶
func (T *DefaultHandle) TCP(cconn net.Conn, r *RequestTCP) error
func (*DefaultHandle) UDP ¶
func (T *DefaultHandle) UDP(proxyUDP *net.UDPConn, cAddr *net.UDPAddr, d *DatagramUDP) error
type Handler ¶
type Handler interface { TCP(net.Conn, *RequestTCP) error UDP(*net.UDPConn, *net.UDPAddr, *DatagramUDP) error }
type NegotiationReply ¶
func NewNegotiateMethodReply ¶ added in v1.0.6
func NewNegotiateMethodReply(method byte) *NegotiationReply
server
+----+--------+ |VER | METHOD | +----+--------+ | 1 | 1 | +----+--------+
func ReadNegotiateMethodReply ¶ added in v1.0.6
func ReadNegotiateMethodReply(r io.Reader) (*NegotiationReply, error)
client
+----+--------+ |VER | METHOD | +----+--------+ | 1 | 1 | +----+--------+
type NegotiationReplyAuth ¶
func NewNegotiateAuthReply ¶ added in v1.0.6
func NewNegotiateAuthReply(status byte) *NegotiationReplyAuth
server
+----+--------+ |VER | STATUS | +----+--------+ | 1 | 1 | +----+--------+
func ReadNegotiateAuthReply ¶ added in v1.0.6
func ReadNegotiateAuthReply(r io.Reader) (*NegotiationReplyAuth, error)
client
+----+--------+ |VER | STATUS | +----+--------+ | 1 | 1 | +----+--------+
type NegotiationRequest ¶
func NewNegotiateMethodRequest ¶ added in v1.0.6
func NewNegotiateMethodRequest(methods []byte) *NegotiationRequest
client
+----+----------+----------+ |VER | NMETHODS | METHODS | +----+----------+----------+ | 1 | 1 | 1 to 255 | +----+----------+----------+
func ReadNegotiateMethodRequest ¶ added in v1.0.6
func ReadNegotiateMethodRequest(r io.Reader) (*NegotiationRequest, error)
server
+----+----------+----------+ |VER | NMETHODS | METHODS | +----+----------+----------+ | 1 | 1 | 1 to 255 | +----+----------+----------+
type NegotiationRequestAuth ¶
type NegotiationRequestAuth struct { Ver byte Ulen byte Uname []byte // 1-255 bytes Plen byte Passwd []byte // 1-255 bytes }
func NewNegotiateAuthRequest ¶ added in v1.0.6
func NewNegotiateAuthRequest(username []byte, password []byte) *NegotiationRequestAuth
client
+----+------+----------+------+----------+ |VER | ULEN | UNAME | PLEN | PASSWD | +----+------+----------+------+----------+ | 1 | 1 | 1 to 255 | 1 | 1 to 255 | +----+------+----------+------+----------+
func ReadNegotiateAuthRequest ¶ added in v1.0.6
func ReadNegotiateAuthRequest(r io.Reader) (*NegotiationRequestAuth, error)
server
+----+------+----------+------+----------+ |VER | ULEN | UNAME | PLEN | PASSWD | +----+------+----------+------+----------+ | 1 | 1 | 1 to 255 | 1 | 1 to 255 | +----+------+----------+------+----------+
type ReplyTCP ¶
type ReplyTCP struct { Ver byte Rep byte Rsv byte // 0x00 Atyp byte // CONNECT socks server's address which used to connect to dst addr // BIND ... // UDP socks server's address which used to connect to dst addr BndAddr []byte // CONNECT socks server's port which used to connect to dst addr // BIND ... // UDP socks server's port which used to connect to dst addr BndPort []byte // 2 bytes }
func NewReplyTCP ¶ added in v1.0.6
server
+----+-----+-------+------+----------+----------+ |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+
func ReadReplyTCP ¶ added in v1.0.6
client
+----+-----+-------+------+----------+----------+ |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+
type RequestTCP ¶
type RequestTCP struct { Ver byte Cmd byte Rsv byte // 0x00 Atyp byte DstAddr []byte DstPort []byte // 2 bytes }
func NewRequestTCP ¶ added in v1.0.6
func NewRequestTCP(cmd byte, atyp byte, dstaddr []byte, dstport []byte) *RequestTCP
client
+----+-----+-------+------+----------+----------+ |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+
func ReadRequestTCP ¶ added in v1.0.6
func ReadRequestTCP(r io.Reader) (*RequestTCP, error)
server
+----+-----+-------+------+----------+----------+ |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+
func (*RequestTCP) Address ¶
func (r *RequestTCP) Address() string
func (*RequestTCP) RemoteConnect ¶
func (*RequestTCP) ReplyError ¶ added in v1.0.6
func (r *RequestTCP) ReplyError(rep byte, w io.Writer) error
Click to show internal directories.
Click to hide internal directories.