fix all test
This commit is contained in:
parent
10f96879ba
commit
9136d71943
20
_example/client/main.go
Normal file
20
_example/client/main.go
Normal file
@ -0,0 +1,20 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/thinkgos/go-socks5/ccsocks5"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client := ccsocks5.NewClient(
|
||||
"127.0.0.1:10800",
|
||||
ccsocks5.WithKeepAlivePeriod(time.Second*30),
|
||||
)
|
||||
conn, err := client.Dial("tcp", "127.0.0.1:12345") // server you want to visitor
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
conn.Write([]byte("hahaha"))
|
||||
time.Sleep(time.Second)
|
||||
}
|
@ -9,7 +9,9 @@ import (
|
||||
|
||||
func main() {
|
||||
// Create a SOCKS5 server
|
||||
server := socks5.NewServer(socks5.WithLogger(socks5.NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags))))
|
||||
server := socks5.NewServer(
|
||||
socks5.WithLogger(socks5.NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags))),
|
||||
)
|
||||
|
||||
// Create SOCKS5 proxy on localhost port 8000
|
||||
if err := server.ListenAndServe("tcp", ":10800"); err != nil {
|
@ -39,9 +39,8 @@ func main() {
|
||||
|
||||
go func() {
|
||||
time.Sleep(time.Second * 1)
|
||||
c, err := ccsocks5.NewClient("127.0.0.1:10808")
|
||||
handleErr(err)
|
||||
con, err := c.Dial("tcp", lAddr.String())
|
||||
client := ccsocks5.NewClient("127.0.0.1:10808")
|
||||
con, err := client.Dial("tcp", lAddr.String())
|
||||
handleErr(err)
|
||||
|
||||
for {
|
@ -24,7 +24,7 @@ type Client struct {
|
||||
|
||||
// NewClient This is just create a client.
|
||||
// you need to use Dial to create conn.
|
||||
func NewClient(proxyAddr string, opts ...Option) (*Client, error) {
|
||||
func NewClient(proxyAddr string, opts ...Option) *Client {
|
||||
c := &Client{
|
||||
proxyAddr: proxyAddr,
|
||||
keepAlivePeriod: time.Second * 30,
|
||||
@ -33,7 +33,7 @@ func NewClient(proxyAddr string, opts ...Option) (*Client, error) {
|
||||
for _, opt := range opts {
|
||||
opt(c)
|
||||
}
|
||||
return c, nil
|
||||
return c
|
||||
}
|
||||
|
||||
// Close closes the connection.
|
||||
|
26
server.go
26
server.go
@ -24,12 +24,12 @@ type GPool interface {
|
||||
type Server struct {
|
||||
authMethods map[uint8]Authenticator
|
||||
// AuthMethods can be provided to implement custom authentication
|
||||
// By default, "auth-less" mode is enabled.
|
||||
// By default, "no-auth" mode is enabled.
|
||||
// For password-based auth use UserPassAuthenticator.
|
||||
authCustomMethods []Authenticator
|
||||
// If provided, username/password authentication is enabled,
|
||||
// by appending a UserPassAuthenticator to AuthMethods. If not provided,
|
||||
// and AUthMethods is nil, then "auth-less" mode is enabled.
|
||||
// and authCustomMethods is nil, then "no-auth" mode is enabled.
|
||||
credentials CredentialStore
|
||||
// resolver can be provided to do custom name resolution.
|
||||
// Defaults to DNSResolver if not provided.
|
||||
@ -58,11 +58,11 @@ type Server struct {
|
||||
userAssociateHandle func(ctx context.Context, writer io.Writer, request *Request) error
|
||||
}
|
||||
|
||||
// NewServer creates a new Server and potentially returns an error
|
||||
// NewServer creates a new Server
|
||||
func NewServer(opts ...Option) *Server {
|
||||
server := &Server{
|
||||
srv := &Server{
|
||||
authMethods: make(map[uint8]Authenticator),
|
||||
authCustomMethods: []Authenticator{&NoAuthAuthenticator{}},
|
||||
authCustomMethods: []Authenticator{},
|
||||
bufferPool: bufferpool.NewPool(32 * 1024),
|
||||
resolver: DNSResolver{},
|
||||
rules: NewPermitAll(),
|
||||
@ -73,19 +73,23 @@ func NewServer(opts ...Option) *Server {
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(server)
|
||||
opt(srv)
|
||||
}
|
||||
|
||||
// Ensure we have at least one authentication method enabled
|
||||
if len(server.authCustomMethods) == 0 && server.credentials != nil {
|
||||
server.authCustomMethods = []Authenticator{&UserPassAuthenticator{server.credentials}}
|
||||
if (len(srv.authCustomMethods) == 0) && srv.credentials != nil {
|
||||
srv.authCustomMethods = []Authenticator{&UserPassAuthenticator{srv.credentials}}
|
||||
}
|
||||
|
||||
for _, v := range server.authCustomMethods {
|
||||
server.authMethods[v.GetCode()] = v
|
||||
if len(srv.authCustomMethods) == 0 {
|
||||
srv.authCustomMethods = []Authenticator{&NoAuthAuthenticator{}}
|
||||
}
|
||||
|
||||
return server
|
||||
for _, v := range srv.authCustomMethods {
|
||||
srv.authMethods[v.GetCode()] = v
|
||||
}
|
||||
|
||||
return srv
|
||||
}
|
||||
|
||||
// ListenAndServe is used to create a listener and serve on it
|
||||
|
@ -258,7 +258,7 @@ func Test_SocksWithProxy(t *testing.T) {
|
||||
func TestNoAuth_Server(t *testing.T) {
|
||||
req := bytes.NewBuffer(nil)
|
||||
rsp := new(bytes.Buffer)
|
||||
s := NewServer()
|
||||
s := NewServer(WithAuthMethods([]Authenticator{&NoAuthAuthenticator{}}))
|
||||
|
||||
ctx, err := s.authenticate(rsp, req, "", []byte{statute.MethodNoAuth})
|
||||
require.NoError(t, err)
|
||||
|
@ -50,11 +50,10 @@ func Test_Socks5_Connect(t *testing.T) {
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
// Get a local conn
|
||||
client, err := ccsocks5.NewClient("127.0.0.1:12389",
|
||||
client := ccsocks5.NewClient("127.0.0.1:12389",
|
||||
ccsocks5.WithAuth(&proxy.Auth{User: "user", Password: "pass"}),
|
||||
ccsocks5.WithBufferPool(bufferpool.NewPool(32*1024)),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
conn, err := client.Dial("tcp", l.Addr().String())
|
||||
require.NoError(t, err)
|
||||
@ -105,11 +104,10 @@ func Test_socks5_Associate(t *testing.T) {
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
// Get a local conn
|
||||
client, err := ccsocks5.NewClient(
|
||||
client := ccsocks5.NewClient(
|
||||
"127.0.0.1:12385",
|
||||
ccsocks5.WithAuth(&proxy.Auth{User: "user", Password: "pass"}),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
conn, err := client.Dial("udp", lAddr.String())
|
||||
require.NoError(t, err)
|
||||
|
Loading…
Reference in New Issue
Block a user