From d1043cff83bf35220ca7a025db5dd50a1202259c Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Sun, 12 Jan 2020 20:33:53 +0800 Subject: [PATCH] add notls option for SOCKS5 --- client.go | 8 ++++++++ cmd/gost/route.go | 1 + socks.go | 26 +++++++++++++++++++++----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/client.go b/client.go index 7382686..3c5d896 100644 --- a/client.go +++ b/client.go @@ -243,6 +243,7 @@ type ConnectOptions struct { User *url.Userinfo Selector gosocks5.Selector UserAgent string + NoTLS bool } // ConnectOption allows a common way to set ConnectOptions. @@ -282,3 +283,10 @@ func UserAgentConnectOption(ua string) ConnectOption { opts.UserAgent = ua } } + +// NoTLSConnectOption specifies the SOCKS5 method without TLS. +func NoTLSConnectOption(b bool) ConnectOption { + return func(opts *ConnectOptions) { + opts.NoTLS = b + } +} diff --git a/cmd/gost/route.go b/cmd/gost/route.go index 8128fda..184052a 100644 --- a/cmd/gost/route.go +++ b/cmd/gost/route.go @@ -220,6 +220,7 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) { node.ConnectOptions = []gost.ConnectOption{ gost.UserAgentConnectOption(node.Get("agent")), + gost.NoTLSConnectOption(node.GetBool("notls")), } if host == "" { diff --git a/socks.go b/socks.go index cfc4480..3c765fa 100644 --- a/socks.go +++ b/socks.go @@ -42,6 +42,9 @@ type clientSelector struct { } func (selector *clientSelector) Methods() []uint8 { + if Debug { + log.Log("[socks5] methods:", selector.methods) + } return selector.methods } @@ -54,6 +57,9 @@ func (selector *clientSelector) Select(methods ...uint8) (method uint8) { } func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) { + if Debug { + log.Log("[socks5] method selected:", method) + } switch method { case MethodTLS: conn = tls.Client(conn, selector.TLSConfig) @@ -215,7 +221,9 @@ func (c *socks5Connector) Connect(conn net.Conn, addr string, options ...Connect } cc, err := socks5Handshake(conn, selectorSocks5HandshakeOption(opts.Selector), - userSocks5HandshakeOption(user)) + userSocks5HandshakeOption(user), + noTLSSocks5HandshakeOption(opts.NoTLS), + ) if err != nil { return nil, err } @@ -285,7 +293,9 @@ func (c *socks5BindConnector) Connect(conn net.Conn, addr string, options ...Con } cc, err := socks5Handshake(conn, selectorSocks5HandshakeOption(opts.Selector), - userSocks5HandshakeOption(user)) + userSocks5HandshakeOption(user), + noTLSSocks5HandshakeOption(opts.NoTLS), + ) if err != nil { return nil, err } @@ -435,7 +445,9 @@ func (tr *socks5MuxBindTransporter) initSession(conn net.Conn, addr string, opts opts = &HandshakeOptions{} } - cc, err := socks5Handshake(conn, userSocks5HandshakeOption(opts.User)) + cc, err := socks5Handshake(conn, + userSocks5HandshakeOption(opts.User), + ) if err != nil { return nil, err } @@ -521,7 +533,9 @@ func (c *socks5UDPConnector) Connect(conn net.Conn, addr string, options ...Conn } cc, err := socks5Handshake(conn, selectorSocks5HandshakeOption(opts.Selector), - userSocks5HandshakeOption(user)) + userSocks5HandshakeOption(user), + noTLSSocks5HandshakeOption(opts.NoTLS), + ) if err != nil { return nil, err } @@ -602,7 +616,9 @@ func (c *socks5UDPTunConnector) Connect(conn net.Conn, addr string, options ...C } cc, err := socks5Handshake(conn, selectorSocks5HandshakeOption(opts.Selector), - userSocks5HandshakeOption(user)) + userSocks5HandshakeOption(user), + noTLSSocks5HandshakeOption(opts.NoTLS), + ) if err != nil { return nil, err }