brook

package module
v0.0.0-...-61d84b3 Latest Latest
Warning

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

Go to latest
Published: Nov 9, 2017 License: GPL-3.0 Imports: 20 Imported by: 0

README

Brook

Build Status Go Report Card Wiki

Brook


New features (v20171111)
  • New Brook Protocol, TCP/UDP full supported
  • Brook Stream Protocol, TCP/UDP full supported
  • Shadowsocks Protocol, TCP/UDP full supported
Breaking change (v20171111)
  • Rename orignal brook protocol to Brook Stream, $ brook streamserver, $ brook streamclient. Music removed
  • Many command arguments changed
  • If you use shadowsocks protocol on Brook Android, your shadowsocks server must full support UDP
  • Thanks to shdowsocks AEAD

Table of Contents

What is Brook

Brook is a cross-platform(Linux/MacOS/Windows/Android/iOS) proxy/vpn software.
Brook's goal is to reduce the configuration steps. Keep it simple, stupid.

Download

Download Server/Client OS Arch Remark
brook Server & Client Linux amd64 CLI
brook_linux_386 Server & Client Linux 386 CLI
brook_linux_arm64 Server & Client Linux arm64 CLI
brook_linux_arm5 Server & Client Linux arm5 CLI
brook_linux_arm6 Server & Client Linux arm6 CLI
brook_linux_arm7 Server & Client Linux arm7 CLI
brook_macos_amd64 Server & Client MacOS amd64 CLI
brook_windows_amd64.exe Server & Client Windows amd64 CLI
brook_windows_386.exe Server & Client Windows 386 CLI
Brook.app.zip Client MacOS amd64 GUI
Brook.app.white.zip Client(white icon) MacOS amd64 GUI
Brook.exe Client Windows amd64 GUI
Brook.white.exe Client(white icon) Windows amd64 GUI
Brook.386.exe Client Windows 386 GUI
Brook.386.white.exe Client(white icon) Windows 386 GUI
App Store Client iOS - GUI
Google Play / Brook.apk Client Android - GUI

See wiki for more tutorials

Server

NAME:
   Brook - A Cross-Platform Proxy Software

USAGE:
   brook [global options] command [command options] [arguments...]

VERSION:
   20171113

AUTHOR:
   Cloud <cloud@txthinking.com>

COMMANDS:
     server         Run as server mode
     servers        Run as multiple servers mode
     client         Run as client mode
     streamserver   Run as server mode
     streamservers  Run as multiple servers mode
     streamclient   Run as client mode
     ssserver       Run as shadowsocks server mode, fixed method is aes-256-cfb
     ssservers      Run as shadowsocks multiple servers mode, fixed method is aes-256-cfb
     ssclient       Run as shadowsocks client mode, fixed method is aes-256-cfb
     socks5         Run as raw socks5 server
     relay          Run as relay mode
     relays         Run as multiple relays mode
     qr             Print brook server QR code
     socks5tohttp   Convert socks5 to http proxy
     help, h        Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d               Enable debug
   --listen value, -l value  Listen address for debug (default: ":6060")
   --help, -h                show help
   --version, -v             print the version
Brook Server
# Run as a brook server
$ brook server -l :9999 -p password
# Run as a brook stream server
$ brook streamserver -l :9999 -p password
# Run as multiple brook servers
$ brook servers \
        -l ":9999 password" \
        -l ":8888 password"
Shadowsocks Server
# Run as a shadowsocks server
$ brook ssserver -l :9999 -p password
# Run as multiple shadowsocks servers
$ brook ssservers \
        -l ":9999 password" \
        -l ":8888 password"

Fixed method is aes-256-cfb

If you run a public/shared server, do not forget this parameter --tcpDeadline

Client (CLI)

Brook Client
# Run as brook client, start a socks5 proxy
$ brook client -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password
# Run as brook client, start a http(s) proxy
$ brook client -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password --http
# Run as brook stream client, start a socks5 proxy
$ brook streamclient -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password
# Run as brook stream client, start a http(s) proxy
$ brook streamclient -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password --http
Shadowsocks Client
# Run as shadowsocks client, start a socks5 proxy
$ brook ssclient -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password
# Run as shadowsocks client, start a http(s) proxy
$ brook ssclient -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password --http

See wiki for more tutorials

Contributing
  • Please create PR on develop branch

License

Licensed under The GPLv3 License

Documentation

Index

Constants

This section is empty.

Variables

Functions

func Decrypt

func Decrypt(p, b []byte) (a byte, addr, port, data []byte, err error)

Decrypt data

func EnableDebug

func EnableDebug()

EnableDebug

func Encrypt

func Encrypt(p, b []byte) ([]byte, error)

Encrypt data

func ErrorReply

func ErrorReply(r *socks5.Request, c *net.TCPConn, e error) error

func GetKey

func GetKey(p, n []byte) ([]byte, error)

GetKey

func IncrementNonce

func IncrementNonce(n []byte) []byte

IncrementNonce loves your compute to use Litter Endian

func MakeSSKey

func MakeSSKey(password string) []byte

MakeSSKey used to make shadowsocks aes-256-cfb key

func PrepareKey

func PrepareKey(p []byte) ([]byte, []byte, error)

PrepareKey

func QR

func QR(stream bool, server, password string)

QR generate and print QR code

func ReadFrom

func ReadFrom(c *net.TCPConn, k, n []byte, hasTime bool) ([]byte, []byte, error)

ReadFrom

func RunClient

func RunClient(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunClient used to make a new Client and start a socks5 proxy to listen

func RunClientAsHTTP

func RunClientAsHTTP(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunClientAsHTTP used to make a new Client and start a http proxy to listen

func RunRelay

func RunRelay(address, remote string, tcpTimeout, tcpDeadline, udpDeadline int) error

RunRelay used to make a new Relay and start to listen

func RunSSClient

func RunSSClient(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunSSClient used to make a new Client and start a socks5 proxy to listen

func RunSSClientAsHTTP

func RunSSClientAsHTTP(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunSSClientAsHTTP used to make a new Client and start a http proxy to listen

func RunSSServer

func RunSSServer(address, password string, tcpTimeout, tcpDeadline, udpDeadline int) error

RunSSServer used to make a new Server and start to listen

func RunServer

func RunServer(address, password string, tcpTimeout, tcpDeadline, udpDeadline int) error

RunServer used to make a new Server and start to listen

func RunSocks5Server

func RunSocks5Server(address, ip, username, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunSocks5Server used to make a new Socks5Server and start a raw socks5 proxy to listen

func RunSocks5ToHTTP

func RunSocks5ToHTTP(address, socks5 string, timeout, deadline int) error

RunSocks5ToHTTP used to make a new Socks5ToHTTP and start a http proxy to listen

func RunStreamClient

func RunStreamClient(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunStreamClient used to make a new StreamClient and start a socks5 proxy to listen

func RunStreamClientAsHTTP

func RunStreamClientAsHTTP(address, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) error

RunClientAsHTTP used to make a new StreamClient and start a http proxy to listen

func RunStreamServer

func RunStreamServer(address, password string, tcpTimeout, tcpDeadline, udpDeadline int) error

RunStreamServer used to make a new StreamServer and start to listen

func WriteTo

func WriteTo(c *net.TCPConn, d, k, n []byte, needTime bool) ([]byte, error)

WriteTo

Types

type CipherConn

type CipherConn struct {
	// contains filtered or unexported fields
}

CipherConn is the encrypted connection

func NewCipherConn

func NewCipherConn(c net.Conn, key []byte, iv []byte) (*CipherConn, error)

NewCipherConn returns a new CipherConn, iv length must be equal aes.BlockSize

func (*CipherConn) Close

func (c *CipherConn) Close() error

Close is just like net.Conn interface

func (*CipherConn) LocalAddr

func (c *CipherConn) LocalAddr() net.Addr

LocalAddr is just like net.Conn interface

func (*CipherConn) Read

func (c *CipherConn) Read(b []byte) (n int, err error)

Read is just like net.Conn interface

func (*CipherConn) RemoteAddr

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

RemoteAddr is just like net.Conn interface

func (*CipherConn) SetDeadline

func (c *CipherConn) SetDeadline(t time.Time) error

SetDeadline is just like net.Conn interface

func (*CipherConn) SetReadDeadline

func (c *CipherConn) SetReadDeadline(t time.Time) error

SetReadDeadline is just like net.Conn interface

func (*CipherConn) SetWriteDeadline

func (c *CipherConn) SetWriteDeadline(t time.Time) error

SetWriteDeadline is just like net.Conn interface

func (*CipherConn) Write

func (c *CipherConn) Write(b []byte) (n int, err error)

Write is just like net.Conn interface

type Client

type Client struct {
	Server          *socks5.Server
	RemoteAddr      string
	Password        []byte
	TCPTimeout      int
	TCPDeadline     int
	UDPDeadline     int
	Socks5Middleman Socks5Middleman
	HTTPMiddleman   HTTPMiddleman
	TCPListen       *net.TCPListener
}

Client

func NewClient

func NewClient(addr, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) (*Client, error)

NewClient returns a new Client

func (*Client) HTTPHandle

func (x *Client) HTTPHandle(c *net.TCPConn) error

HTTPHandle handle http request

func (*Client) ListenAndServe

func (x *Client) ListenAndServe(sm Socks5Middleman) error

ListenAndServe will let client start a socks5 proxy sm can be nil

func (*Client) ListenAndServeHTTP

func (x *Client) ListenAndServeHTTP(m HTTPMiddleman) error

ListenAndServeHTTP will let client start a http proxy m can be nil

func (*Client) Shutdown

func (x *Client) Shutdown() error

Shutdown used to stop the client

func (*Client) TCPHandle

func (x *Client) TCPHandle(s *socks5.Server, c *net.TCPConn, r *socks5.Request) error

TCPHandle handles tcp request

func (*Client) UDPHandle

func (x *Client) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error

UDPHandle handles udp request

type HTTPMiddleman

type HTTPMiddleman interface {
	// Addr is the absoluteURI, RFC 2396.
	// Request is the http header, don't guarantee it is complete, but must contains the host line
	// Has not written anything to conn.
	// Handle does not need to close conn.
	// Ff handled is true or err is not nil that means the request has been handled
	Handle(method, addr string, request []byte, conn *net.TCPConn) (handled bool, err error)
}

HTTPMiddleman is a middleman who can intercept and handle request

type Relay

type Relay struct {
	TCPAddr       *net.TCPAddr
	UDPAddr       *net.UDPAddr
	RemoteTCPAddr *net.TCPAddr
	RemoteUDPAddr *net.UDPAddr
	TCPListen     *net.TCPListener
	UDPConn       *net.UDPConn
	UDPExchanges  *cache.Cache
	TCPDeadline   int // Not refreshed
	TCPTimeout    int
	UDPDeadline   int
}

Relay is stream relay server

func NewRelay

func NewRelay(addr, remote string, tcpTimeout, tcpDeadline, udpDeadline int) (*Relay, error)

NewRelay

func (*Relay) ListenAndServe

func (s *Relay) ListenAndServe() error

Run server

func (*Relay) RunTCPServer

func (s *Relay) RunTCPServer() error

RunTCPServer starts tcp server

func (*Relay) RunUDPServer

func (s *Relay) RunUDPServer() error

RunUDPServer starts udp server

func (*Relay) Shutdown

func (s *Relay) Shutdown() error

Shutdown server

func (*Relay) TCPHandle

func (s *Relay) TCPHandle(c *net.TCPConn) error

TCPHandle handle request

func (*Relay) UDPHandle

func (s *Relay) UDPHandle(addr *net.UDPAddr, b []byte) error

UDPHandle handle packet

type SSClient

type SSClient struct {
	Server          *socks5.Server
	RemoteAddr      string
	Password        []byte
	TCPTimeout      int
	TCPDeadline     int // Not refreshed
	UDPDeadline     int
	Socks5Middleman Socks5Middleman
	HTTPMiddleman   HTTPMiddleman
	TCPListen       *net.TCPListener
}

SSClient

func NewSSClient

func NewSSClient(addr, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) (*SSClient, error)

NewSSClient returns a new SSClient

func (*SSClient) Decrypt

func (x *SSClient) Decrypt(cd []byte) (a byte, addr, port, data []byte, err error)

Decrypt data

func (*SSClient) Encrypt

func (x *SSClient) Encrypt(rawdata []byte) ([]byte, error)

Encrypt data

func (*SSClient) HTTPHandle

func (x *SSClient) HTTPHandle(c *net.TCPConn) error

HTTPHandle handle http request

func (*SSClient) ListenAndServe

func (x *SSClient) ListenAndServe(sm Socks5Middleman) error

ListenAndServe will let client start a socks5 proxy sm can be nil

func (*SSClient) ListenAndServeHTTP

func (x *SSClient) ListenAndServeHTTP(m HTTPMiddleman) error

ListenAndServeHTTP will let client start a http proxy m can be nil

func (*SSClient) Shutdown

func (x *SSClient) Shutdown() error

Shutdown used to stop the client

func (*SSClient) TCPHandle

func (x *SSClient) TCPHandle(s *socks5.Server, c *net.TCPConn, r *socks5.Request) error

TCPHandle handles tcp request

func (*SSClient) UDPHandle

func (x *SSClient) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error

UDPHandle handles udp request

func (*SSClient) WrapCipherConn

func (x *SSClient) WrapCipherConn(conn *net.TCPConn) (*CipherConn, error)

WrapChiperConn make a chiper conn

type SSServer

type SSServer struct {
	Password     []byte
	TCPAddr      *net.TCPAddr
	UDPAddr      *net.UDPAddr
	TCPListen    *net.TCPListener
	UDPConn      *net.UDPConn
	UDPExchanges *cache.Cache
	TCPDeadline  int // Not refreshed
	TCPTimeout   int
	UDPDeadline  int
}

SSServer

func NewSSServer

func NewSSServer(addr, password string, tcpTimeout, tcpDeadline, udpDeadline int) (*SSServer, error)

NewSSServer

func (*SSServer) Decrypt

func (s *SSServer) Decrypt(cd []byte) (a byte, addr, port, data []byte, err error)

Decrypt data

func (*SSServer) Encrypt

func (s *SSServer) Encrypt(a byte, h, p, d []byte) ([]byte, error)

Encrypt data

func (*SSServer) ListenAndServe

func (s *SSServer) ListenAndServe() error

ListenAndServe server

func (*SSServer) RunTCPServer

func (s *SSServer) RunTCPServer() error

RunTCPServer starts tcp server

func (*SSServer) RunUDPServer

func (s *SSServer) RunUDPServer() error

RunUDPServer starts udp server

func (*SSServer) Shutdown

func (s *SSServer) Shutdown() error

Shutdown server

func (*SSServer) TCPHandle

func (s *SSServer) TCPHandle(c *net.TCPConn) error

TCPHandle handle request

func (*SSServer) UDPHandle

func (s *SSServer) UDPHandle(addr *net.UDPAddr, b []byte) error

UDPHandle handle packet

func (*SSServer) WrapCipherConn

func (s *SSServer) WrapCipherConn(conn net.Conn) (*CipherConn, error)

WrapChiperConn make a chiper conn

type Server

type Server struct {
	Password     []byte
	TCPAddr      *net.TCPAddr
	UDPAddr      *net.UDPAddr
	TCPListen    *net.TCPListener
	UDPConn      *net.UDPConn
	UDPExchanges *cache.Cache
	TCPDeadline  int
	TCPTimeout   int
	UDPDeadline  int
}

Server

func NewServer

func NewServer(addr, password string, tcpTimeout, tcpDeadline, udpDeadline int) (*Server, error)

NewServer

func (*Server) ListenAndServe

func (s *Server) ListenAndServe() error

Run server

func (*Server) RunTCPServer

func (s *Server) RunTCPServer() error

RunTCPServer starts tcp server

func (*Server) RunUDPServer

func (s *Server) RunUDPServer() error

RunUDPServer starts udp server

func (*Server) Shutdown

func (s *Server) Shutdown() error

Shutdown server

func (*Server) TCPHandle

func (s *Server) TCPHandle(c *net.TCPConn) error

TCPHandle handle request

func (*Server) UDPHandle

func (s *Server) UDPHandle(addr *net.UDPAddr, b []byte) error

UDPHandle handle packet

type Socks5Middleman

type Socks5Middleman interface {
	// TCPRequestHandle does not need to close conn,
	// if return true that means the request has been handled
	TCPHandle(*socks5.Server, *net.TCPConn, *socks5.Request) (bool, error)

	// UDPPacketHandle handles udp packet.
	// If return true that means the request has been handled.
	UDPHandle(*socks5.Server, *net.UDPAddr, *socks5.Datagram) (bool, error)
}

Socks5Middleman is a middleman who can intercept and handle request

type Socks5Server

type Socks5Server struct {
	Server          *socks5.Server
	Middleman       Socks5Middleman
	TCPTimeout      int
	TCPDeadline     int // not refreshed
	UDPDeadline     int
	UDPSessionTime  int
	ForwardAddress  string
	ForwardUserName string
	ForwardPassword string
	Cache           *cache.Cache
}

Socks5Server is the client of raw socks5 protocol

func NewSocks5Server

func NewSocks5Server(addr, ip, userName, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) (*Socks5Server, error)

NewSocks5Server returns a new Socks5Server

func (*Socks5Server) ListenAndForward

func (x *Socks5Server) ListenAndForward(addr, username, password string, sm Socks5Middleman) error

ListenAndForward will let client start a proxy to listen and forward to another socks5, sm can be nil

func (*Socks5Server) ListenAndServe

func (x *Socks5Server) ListenAndServe() error

ListenAndServe will let client start to listen and serve, sm can be nil

func (*Socks5Server) Shutdown

func (x *Socks5Server) Shutdown() error

Shutdown used to stop the client

func (*Socks5Server) TCPHandle

func (x *Socks5Server) TCPHandle(s *socks5.Server, c *net.TCPConn, r *socks5.Request) error

TCPHandle handles tcp request

func (*Socks5Server) UDPHandle

func (x *Socks5Server) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error

UDPHandle handles udp request

type Socks5ToHTTP

type Socks5ToHTTP struct {
	Addr          *net.TCPAddr
	Socks5Address string
	Dial          proxy.Dialer
	Timeout       int
	Deadline      int // Not refreshed
	Listen        *net.TCPListener
	Middleman     HTTPMiddleman
}

func NewSocks5ToHTTP

func NewSocks5ToHTTP(addr, socks5addr string, timeout, deadline int) (*Socks5ToHTTP, error)

func (*Socks5ToHTTP) Handle

func (s *Socks5ToHTTP) Handle(c *net.TCPConn) error

func (*Socks5ToHTTP) ListenAndServe

func (s *Socks5ToHTTP) ListenAndServe(h HTTPMiddleman) error

func (*Socks5ToHTTP) Shutdown

func (s *Socks5ToHTTP) Shutdown() error

type StreamClient

type StreamClient struct {
	Server          *socks5.Server
	RemoteAddr      string
	Password        []byte
	TCPTimeout      int
	TCPDeadline     int // Not refreshed
	UDPDeadline     int
	Socks5Middleman Socks5Middleman
	HTTPMiddleman   HTTPMiddleman
	TCPListen       *net.TCPListener
}

StreamClient

func NewStreamClient

func NewStreamClient(addr, ip, server, password string, tcpTimeout, tcpDeadline, udpDeadline, udpSessionTime int) (*StreamClient, error)

NewStreamClient returns a new StreamClient

func (*StreamClient) Decrypt

func (x *StreamClient) Decrypt(cd []byte) (a byte, addr, port, data []byte, err error)

Decrypt data

func (*StreamClient) Encrypt

func (x *StreamClient) Encrypt(rawdata []byte) ([]byte, error)

Encrypt data

func (*StreamClient) HTTPHandle

func (x *StreamClient) HTTPHandle(c *net.TCPConn) error

HTTPHandle handle http request

func (*StreamClient) ListenAndServe

func (x *StreamClient) ListenAndServe(sm Socks5Middleman) error

ListenAndServe will let client start a socks5 proxy sm can be nil

func (*StreamClient) ListenAndServeHTTP

func (x *StreamClient) ListenAndServeHTTP(m HTTPMiddleman) error

ListenAndServeHTTP will let client start a http proxy m can be nil

func (*StreamClient) Shutdown

func (x *StreamClient) Shutdown() error

Shutdown used to stop the client

func (*StreamClient) TCPHandle

func (x *StreamClient) TCPHandle(s *socks5.Server, c *net.TCPConn, r *socks5.Request) error

TCPHandle handles tcp request

func (*StreamClient) UDPHandle

func (x *StreamClient) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error

UDPHandle handles udp request

func (*StreamClient) WrapCipherConn

func (x *StreamClient) WrapCipherConn(conn *net.TCPConn) (*CipherConn, error)

WrapChiperConn make a chiper conn

type StreamServer

type StreamServer struct {
	Password     []byte
	TCPAddr      *net.TCPAddr
	UDPAddr      *net.UDPAddr
	TCPListen    *net.TCPListener
	UDPConn      *net.UDPConn
	UDPExchanges *cache.Cache
	TCPDeadline  int // Not refreshed
	TCPTimeout   int
	UDPDeadline  int
}

StreamServer

func NewStreamServer

func NewStreamServer(addr, password string, tcpTimeout, tcpDeadline, udpDeadline int) (*StreamServer, error)

NewStreamServer

func (*StreamServer) Decrypt

func (s *StreamServer) Decrypt(cd []byte) (a byte, addr, port, data []byte, err error)

Decrypt data

func (*StreamServer) Encrypt

func (s *StreamServer) Encrypt(a byte, h, p, d []byte) ([]byte, error)

Encrypt data

func (*StreamServer) ListenAndServe

func (s *StreamServer) ListenAndServe() error

Run server

func (*StreamServer) RunTCPServer

func (s *StreamServer) RunTCPServer() error

RunTCPServer starts tcp server

func (*StreamServer) RunUDPServer

func (s *StreamServer) RunUDPServer() error

RunUDPServer starts udp server

func (*StreamServer) Shutdown

func (s *StreamServer) Shutdown() error

Shutdown server

func (*StreamServer) TCPHandle

func (s *StreamServer) TCPHandle(c *net.TCPConn) error

TCPHandle handle request

func (*StreamServer) UDPHandle

func (s *StreamServer) UDPHandle(addr *net.UDPAddr, b []byte) error

UDPHandle handle packet

func (*StreamServer) WrapCipherConn

func (s *StreamServer) WrapCipherConn(conn net.Conn) (*CipherConn, error)

WrapChiperConn make a chiper conn

type WhiteHTTPMiddleman

type WhiteHTTPMiddleman struct {
	Timeout  int
	Deadline int
}

WhiteHTTPMiddleman is a HTTPMiddleman who only handle domain in white list

func NewWhiteHTTPMiddleman

func NewWhiteHTTPMiddleman(timeout, deadline int) *WhiteHTTPMiddleman

NewWhiteHTTPMiddleman returns a WhiteHTTPMiddleman which can used to handle http proxy request

func (*WhiteHTTPMiddleman) Handle

func (w *WhiteHTTPMiddleman) Handle(method, addr string, request []byte, conn *net.TCPConn) (handled bool, err error)

Handle handle http proxy request, if the domain is in the white list

type WhiteSocks5Middleman

type WhiteSocks5Middleman struct {
	Handle *socks5.DefaultHandle
}

WhiteSocks5Middleman is a Socks5Middleman who only handle domain in white list

func NewWhiteSocks5Middleman

func NewWhiteSocks5Middleman() *WhiteSocks5Middleman

NewWhiteSocks5Middleman returns a WhiteSocks5Middleman which can used to handle http proxy request

func (*WhiteSocks5Middleman) TCPHandle

func (w *WhiteSocks5Middleman) TCPHandle(s *socks5.Server, c *net.TCPConn, r *socks5.Request) (bool, error)

TCPHandle handles tcp request

func (*WhiteSocks5Middleman) UDPHandle

func (w *WhiteSocks5Middleman) UDPHandle(s *socks5.Server, ca *net.UDPAddr, d *socks5.Datagram) (bool, error)

UDPHandle handles udp packet

Directories

Path Synopsis
cli

Jump to

Keyboard shortcuts

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