-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_test.go
49 lines (45 loc) · 1.08 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package socks5_test
import (
"context"
"errors"
"fmt"
"log/slog"
"net"
"time"
"github.com/linkdata/socks5/client"
"github.com/linkdata/socks5/server"
)
func Example() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second/10)
defer cancel()
listener, err := net.Listen("tcp", ":0")
if err == nil {
defer listener.Close()
srv := server.Server{
Logger: slog.Default(),
Authenticators: []server.Authenticator{
server.NoAuthAuthenticator{},
server.UserPassAuthenticator{
Credentials: server.StaticCredentials{
"joe": "123456",
},
},
},
}
go srv.Serve(ctx, listener)
var cli *client.Client
if cli, err = client.New("socks5h://joe:123456@" + listener.Addr().String()); err == nil {
var l net.Listener
if l, err = cli.ListenContext(ctx, "tcp", ":0"); err == nil {
defer l.Close()
slog.Info("client BIND", "address", l.Addr().String())
fmt.Println("client BIND success")
}
}
}
if err != nil && !errors.Is(err, context.DeadlineExceeded) {
fmt.Printf("failed: %v\n", err)
}
// Output:
// client BIND success
}