Version: v0.0.0-...-5463443 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2022 License: BSD-3-Clause Imports: 6 Imported by: 0



Package socks provides a SOCKS version 5 client implementation.

SOCKS protocol version 5 is defined in RFC 1928. Username/Password authentication for SOCKS version 5 is defined in RFC 1929.



View Source
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

Wire protocol constants.


This section is empty.


This section is empty.


type Addr

type Addr struct {
	Name string // fully-qualified domain name
	IP   net.IP
	Port int

An Addr represents a SOCKS-specific address. Either Name or IP is used exclusively.

func (*Addr) Network

func (a *Addr) Network() string

func (*Addr) String

func (a *Addr) String() string

type AuthMethod

type AuthMethod int

An AuthMethod represents a SOCKS authentication method.

type Command

type Command int

A Command represents a SOCKS command.

func (Command) String

func (cmd Command) String() string

type Conn

type Conn struct {
	// contains filtered or unexported fields

A Conn represents a forward proxy connection.

func (*Conn) BoundAddr

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.

type Dialer

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

A Dialer holds SOCKS-specific options.

func NewDialer

func NewDialer(network, address string) *Dialer

NewDialer returns a new Dialer that dials through the provided proxy server's network and address.

func (*Dialer) Dial deprecated

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 (*Dialer) DialContext

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 (*Dialer) DialWithConn

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.

type Reply

type Reply int

A Reply represents a SOCKS command reply code.

func (Reply) String

func (code Reply) String() string

type UsernamePassword

type UsernamePassword struct {
	Username string
	Password string

UsernamePassword are the credentials for the username/password authentication method.

func (*UsernamePassword) Authenticate

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.

Source Files

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL