Wire protocol constants.
const (
Version5 = 0x05
AddrTypeIPv4 = 0x01
AddrTypeFQDN = 0x03
AddrTypeIPv6 = 0x04
CmdConnect Command = 0x01 // establishes an active-open forward proxy connection
AuthMethodNotRequired AuthMethod = 0x00 // no authentication required
AuthMethodUsernamePassword AuthMethod = 0x02 // use username/password
AuthMethodNoAcceptableMethods AuthMethod = 0xff // no acceptable authentication methods
StatusSucceeded Reply = 0x00
)
An Addr represents a SOCKS-specific address. Either Name or IP is used exclusively.
type Addr struct {
Name string // fully-qualified domain name
IP net.IP
Port int
}
func (a *Addr) Network() string
func (a *Addr) String() string
An AuthMethod represents a SOCKS authentication method.
type AuthMethod int
A Command represents a SOCKS command.
type Command int
func (cmd Command) String() string
A Conn represents a forward proxy connection.
type Conn struct {
net.Conn
// contains filtered or unexported fields
}
func (c *Conn) BoundAddr() net.Addr
BoundAddr returns the address assigned by the proxy server for connecting to the command target address from the proxy server.
A Dialer holds SOCKS-specific options.
type Dialer struct {
// ProxyDial specifies the optional dial function for
// establishing the transport connection.
ProxyDial func(context.Context, string, string) (net.Conn, error)
// AuthMethods specifies the list of request authentication
// methods.
// If empty, SOCKS client requests only AuthMethodNotRequired.
AuthMethods []AuthMethod
// Authenticate specifies the optional authentication
// function. It must be non-nil when AuthMethods is not empty.
// It must return an error when the authentication is failed.
Authenticate func(context.Context, io.ReadWriter, AuthMethod) error
// contains filtered or unexported fields
}
func NewDialer(network, address string) *Dialer
NewDialer returns a new Dialer that dials through the provided proxy server's network and address.
func (d *Dialer) Dial(network, address string) (net.Conn, error)
Dial connects to the provided address on the provided network.
Unlike DialContext, it returns a raw transport connection instead of a forward proxy connection.
Deprecated: Use DialContext or DialWithConn instead.
func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error)
DialContext connects to the provided address on the provided network.
The returned error value may be a net.OpError. When the Op field of net.OpError contains "socks", the Source field contains a proxy server address and the Addr field contains a command target address.
See func Dial of the net package of standard library for a description of the network and address parameters.
func (d *Dialer) DialWithConn(ctx context.Context, c net.Conn, network, address string) (net.Addr, error)
DialWithConn initiates a connection from SOCKS server to the target network and address using the connection c that is already connected to the SOCKS server.
It returns the connection's local address assigned by the SOCKS server.
A Reply represents a SOCKS command reply code.
type Reply int
func (code Reply) String() string
UsernamePassword are the credentials for the username/password authentication method.
type UsernamePassword struct {
Username string
Password string
}
func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, auth AuthMethod) error
Authenticate authenticates a pair of username and password with the proxy server.