A simple socks5 server and client implemented in Golang
- Support socks5 server and client
- Support
TCP(CONNECT)
andUDP(ASSOCIATE)
- Support
No
andUSERNAME/PASSWORD
authentication - Support YAML configuration
Go mod:
go get github.com/josexy/gsocks5
Git clone:
git clone https://github.com/josexy/gsocks5.git
cd gsocks5
You can find all examples in the gsocks5/example
directory
run socks5 server
go run example/server/main.go -c config.yaml
code example
package main
import (
"github.com/josexy/gsocks5/socks"
)
func main() {
svr := socks.NewSocks5Server(":10086")
defer svr.Close()
svr.Start()
}
run socks5 client
go run example/tcp_client/main.go
or curl
command tool
curl -v --socks5 127.0.0.1:10086 -U test:12345678 https://www.google.com
curl -v --socks5 127.0.0.1:10086 https://www.google.com
or Chrome extension Proxy SwitchyOmega
code example
package main
import (
"context"
"fmt"
"io"
"net"
"net/http"
"time"
"github.com/josexy/gsocks5/socks"
)
func main() {
proxyCli := socks.NewSocks5Client("127.0.0.1:10086")
proxyCli.SetSocksAuth("test", "12345678")
defer proxyCli.Close()
transport := &http.Transport{
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
return proxyCli.Dial(ctx, addr)
},
}
cli := http.Client{
Transport: transport,
Timeout: time.Second * 10,
}
resp, err := cli.Get("https://www.google.com")
if err != nil {
return
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
}
The socks server supports the following authentication methods:
username
: Username/Password authenticationnone
: No authentication
listen_addr: 0.0.0.0:10086
socks_method:
- username
- none
auth:
- test:12345678
- test2:123