Documentation
¶
Index ¶
- Constants
- Variables
- type Client
- func (c *Client) Close() error
- func (c *Client) Dial(network, addr string) (net.Conn, error)
- func (c Client) DialWithLocalAddr(network, src, dst string) (net.Conn, error)
- func (c *Client) LocalAddr() net.Addr
- func (c *Client) Read(b []byte) (int, error)
- func (c *Client) RemoteAddr() net.Addr
- func (c *Client) SetDeadline(t time.Time) error
- func (c *Client) SetReadDeadline(t time.Time) error
- func (c *Client) SetWriteDeadline(t time.Time) error
- func (c *Client) Write(b []byte) (int, error)
- type Cmd
- type DatagramUDP
- type DefaultHandle
- type Dialer
- type Handler
- type NegotiationReply
- type NegotiationReplyAuth
- type NegotiationRequest
- type NegotiationRequestAuth
- type ReplyTCP
- type RequestTCP
- type Server
Constants ¶
View Source
const ( // CmdConnect is connect command CmdConnect byte = 0x01 // CmdBind is bind command CmdBind byte = 0x02 // CmdUDP is UDP command CmdUDP byte = 0x03 )
View Source
const ( // MethodNone is none method MethodNone byte = 0x00 // MethodGSSAPI is gssapi method MethodGSSAPI byte = 0x01 // MUST support // todo // MethodUsernamePassword is username/assword auth method MethodUsernamePassword byte = 0x02 // SHOULD support // MethodUnsupportAll means unsupport all given methods MethodUnsupportAll byte = 0xFF )
View Source
const ( // Ver is socks protocol version Ver byte = 0x05 // UserPassVer is username/password auth protocol version UserPassVer byte = 0x01 // UserPassStatusSuccess is success status of username/password auth UserPassStatusSuccess byte = 0x00 // UserPassStatusFailure is failure status of username/password auth UserPassStatusFailure byte = 0x01 // just other than 0x00 // ATYPIPv4 is ipv4 address type ATYPIPv4 byte = 0x01 // 4 octets // ATYPDomain is domain address type 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 address type ATYPIPv6 byte = 0x04 // 16 octets // RepSuccess means that success for repling RepSuccess byte = 0x00 // RepServerFailure means the server failure RepServerFailure byte = 0x01 // RepNotAllowed means the request not allowed RepNotAllowed byte = 0x02 // RepNetworkUnreachable means the network unreachable RepNetworkUnreachable byte = 0x03 // RepHostUnreachable means the host unreachable RepHostUnreachable byte = 0x04 // RepConnectionRefused means the connection refused RepConnectionRefused byte = 0x05 // RepTTLExpired means the TTL expired RepTTLExpired byte = 0x06 // RepCommandNotSupported means the request command not supported RepCommandNotSupported byte = 0x07 // RepAddressNotSupported means the request address not supported 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 ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
Server string
Username string
Password string
DialTCP func(net string, laddr, raddr *net.TCPAddr) (*net.TCPConn, error)
// contains filtered or unexported fields
}
func (Client) DialWithLocalAddr ¶
func (*Client) RemoteAddr ¶
type DatagramUDP ¶
type DatagramUDP struct {
Rsv []byte // 0x00 0x00
Frag byte
Atyp byte
DstAddr []byte
DstPort []byte // 2 bytes
Data []byte
}
数据报文是UDP包
func (*DatagramUDP) Address ¶
func (d *DatagramUDP) Address() string
type DefaultHandle ¶
func (*DefaultHandle) TCP ¶
func (T *DefaultHandle) TCP(clientConn net.Conn, r *RequestTCP) error
func (*DefaultHandle) UDP ¶
func (T *DefaultHandle) UDP(proxyUDP *net.UDPConn, clientAddr *net.UDPAddr, d *DatagramUDP) error
type Handler ¶
type Handler interface {
TCP(net.Conn, *RequestTCP) error
UDP(*net.UDPConn, *net.UDPAddr, *DatagramUDP) error
}
type NegotiationReply ¶
type NegotiationReplyAuth ¶
type NegotiationRequest ¶
type NegotiationRequestAuth ¶
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
}
type RequestTCP ¶
type RequestTCP struct {
Ver byte
Cmd byte
Rsv byte // 0x00
Atyp byte
DstAddr []byte
DstPort []byte // 2 bytes
}
func (*RequestTCP) Address ¶
func (r *RequestTCP) Address() string
func (*RequestTCP) RemoteConnect ¶
Click to show internal directories.
Click to hide internal directories.