socks5

package module
v0.4.3 Latest Latest
Warning

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

Go to latest
Published: Oct 19, 2023 License: MIT Imports: 15 Imported by: 8

README

socks5

Socks5/Socks5h server and client

Build Go Report Card GoDoc GitHub license gocover.io

This project is to add protocol support for the Bridge, or it can be used alone

The following is the implementation of other proxy protocols

Usage

API Documentation

Example

  • Support for the CONNECT command
  • Support for the BIND command
  • Support for the ASSOCIATE command

License

Licensed under the MIT License. See LICENSE for the full license text.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Authentication

type Authentication interface {
	Auth(cmd Command, username, password string) bool
}

Authentication proxy authentication

func UserAuth

func UserAuth(username, password string) Authentication

UserAuth basic authentication

type AuthenticationFunc

type AuthenticationFunc func(cmd Command, username, password string) bool

AuthenticationFunc Authentication interface is implemented

func (AuthenticationFunc) Auth

func (f AuthenticationFunc) Auth(cmd Command, username, password string) bool

Auth authentication processing

type BytesPool added in v0.2.2

type BytesPool interface {
	Get() []byte
	Put([]byte)
}

BytesPool is an interface for getting and returning temporary bytes for use by io.CopyBuffer.

type Command added in v0.2.1

type Command byte

Command is a SOCKS Command.

const (
	ConnectCommand   Command = 0x01
	BindCommand      Command = 0x02
	AssociateCommand Command = 0x03
)

func (Command) String added in v0.2.1

func (cmd Command) String() string

type Dialer

type Dialer struct {
	// ProxyNetwork network between a proxy server and a client
	ProxyNetwork string
	// ProxyAddress proxy server address
	ProxyAddress string
	// ProxyDial specifies the optional dial function for
	// establishing the transport connection.
	ProxyDial func(ctx context.Context, network string, address string) (net.Conn, error)
	// ProxyPacketDial specifies the optional proxyPacketDial function for
	// establishing the transport connection.
	ProxyPacketDial func(ctx context.Context, network string, address string) (net.PacketConn, error)
	// Username use username authentication if not empty
	Username string
	// Password use password authentication if not empty,
	// only valid if username is set
	Password string
	// IsResolve resolve domain name on locally
	IsResolve bool
	// Resolver optionally specifies an alternate resolver to use
	Resolver *net.Resolver
	// Timeout is the maximum amount of time a dial will wait for
	// a connect to complete. The default is no timeout
	Timeout time.Duration
}

Dialer is a SOCKS5 dialer.

func NewDialer

func NewDialer(addr string) (*Dialer, error)

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

func (*Dialer) Dial

func (d *Dialer) Dial(network, address string) (net.Conn, error)

Dial connects to the provided address on the provided network.

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.

func (*Dialer) Listen added in v0.2.1

func (d *Dialer) Listen(ctx context.Context, network, address string) (net.Listener, error)

type Logger added in v0.3.0

type Logger interface {
	Println(v ...interface{})
}

type Server

type Server struct {
	// Authentication is proxy authentication
	Authentication Authentication
	// ProxyDial specifies the optional proxyDial function for
	// establishing the transport connection.
	ProxyDial func(ctx context.Context, network string, address string) (net.Conn, error)
	// ProxyListen specifies the optional proxyListen function for
	// establishing the transport connection.
	ProxyListen func(context.Context, string, string) (net.Listener, error)
	// ProxyListenPacket specifies the optional proxyListenPacket function for
	// establishing the transport connection.
	ProxyListenPacket func(ctx context.Context, network string, address string) (net.PacketConn, error)
	// PacketForwardAddress specifies the packet forwarding address
	PacketForwardAddress func(ctx context.Context, destinationAddr string, packet net.PacketConn, conn net.Conn) (net.IP, int, error)
	// Logger error log
	Logger Logger
	// Context is default context
	Context context.Context
	// BytesPool getting and returning temporary bytes for use by io.CopyBuffer
	BytesPool BytesPool
}

Server is accepting connections and handling the details of the SOCKS5 protocol

func NewServer

func NewServer() *Server

NewServer creates a new Server

func (*Server) ListenAndServe

func (s *Server) ListenAndServe(network, addr string) error

ListenAndServe is used to create a listener and serve on it

func (*Server) Serve

func (s *Server) Serve(l net.Listener) error

Serve is used to serve connections from a listener

func (*Server) ServeConn

func (s *Server) ServeConn(conn net.Conn)

ServeConn is used to serve a single connection.

type SimpleServer added in v0.2.3

type SimpleServer struct {
	Server
	Listener net.Listener
	Network  string
	Address  string
	Username string
	Password string
}

SimpleServer is a simplified server, which can be configured as easily as client.

func NewSimpleServer added in v0.2.3

func NewSimpleServer(addr string) (*SimpleServer, error)

NewServer creates a new NewSimpleServer

func (*SimpleServer) Close added in v0.2.3

func (s *SimpleServer) Close() error

Close closes the listener

func (*SimpleServer) ProxyURL added in v0.2.3

func (s *SimpleServer) ProxyURL() string

ProxyURL returns the URL of the proxy

func (*SimpleServer) Run added in v0.2.3

func (s *SimpleServer) Run(ctx context.Context) error

Run the server

func (*SimpleServer) Start added in v0.2.3

func (s *SimpleServer) Start(ctx context.Context) error

Start the server

type UDPConn added in v0.2.1

type UDPConn struct {
	net.PacketConn
	// contains filtered or unexported fields
}

func NewUDPConn added in v0.2.1

func NewUDPConn(raw net.PacketConn, proxyAddress net.Addr, defaultTarget net.Addr) (*UDPConn, error)

func (*UDPConn) Read added in v0.2.1

func (c *UDPConn) Read(b []byte) (int, error)

Read implements the net.Conn Read method.

func (*UDPConn) ReadFrom added in v0.2.1

func (c *UDPConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)

ReadFrom implements the net.PacketConn ReadFrom method.

func (*UDPConn) RemoteAddr added in v0.4.0

func (c *UDPConn) RemoteAddr() net.Addr

RemoteAddr implements the net.Conn RemoteAddr method.

func (*UDPConn) Write added in v0.2.1

func (c *UDPConn) Write(b []byte) (int, error)

Write implements the net.Conn Write method.

func (*UDPConn) WriteTo added in v0.2.1

func (c *UDPConn) WriteTo(p []byte, addr net.Addr) (n int, err error)

WriteTo implements the net.PacketConn WriteTo method.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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