Commit d1043cff authored by ginuerzh's avatar ginuerzh

add notls option for SOCKS5

parent c5fc56d1
...@@ -243,6 +243,7 @@ type ConnectOptions struct { ...@@ -243,6 +243,7 @@ type ConnectOptions struct {
User *url.Userinfo User *url.Userinfo
Selector gosocks5.Selector Selector gosocks5.Selector
UserAgent string UserAgent string
NoTLS bool
} }
// ConnectOption allows a common way to set ConnectOptions. // ConnectOption allows a common way to set ConnectOptions.
...@@ -282,3 +283,10 @@ func UserAgentConnectOption(ua string) ConnectOption { ...@@ -282,3 +283,10 @@ func UserAgentConnectOption(ua string) ConnectOption {
opts.UserAgent = ua opts.UserAgent = ua
} }
} }
// NoTLSConnectOption specifies the SOCKS5 method without TLS.
func NoTLSConnectOption(b bool) ConnectOption {
return func(opts *ConnectOptions) {
opts.NoTLS = b
}
}
...@@ -220,6 +220,7 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) { ...@@ -220,6 +220,7 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
node.ConnectOptions = []gost.ConnectOption{ node.ConnectOptions = []gost.ConnectOption{
gost.UserAgentConnectOption(node.Get("agent")), gost.UserAgentConnectOption(node.Get("agent")),
gost.NoTLSConnectOption(node.GetBool("notls")),
} }
if host == "" { if host == "" {
......
...@@ -42,6 +42,9 @@ type clientSelector struct { ...@@ -42,6 +42,9 @@ type clientSelector struct {
} }
func (selector *clientSelector) Methods() []uint8 { func (selector *clientSelector) Methods() []uint8 {
if Debug {
log.Log("[socks5] methods:", selector.methods)
}
return selector.methods return selector.methods
} }
...@@ -54,6 +57,9 @@ func (selector *clientSelector) Select(methods ...uint8) (method uint8) { ...@@ -54,6 +57,9 @@ func (selector *clientSelector) Select(methods ...uint8) (method uint8) {
} }
func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) { func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) {
if Debug {
log.Log("[socks5] method selected:", method)
}
switch method { switch method {
case MethodTLS: case MethodTLS:
conn = tls.Client(conn, selector.TLSConfig) conn = tls.Client(conn, selector.TLSConfig)
...@@ -215,7 +221,9 @@ func (c *socks5Connector) Connect(conn net.Conn, addr string, options ...Connect ...@@ -215,7 +221,9 @@ func (c *socks5Connector) Connect(conn net.Conn, addr string, options ...Connect
} }
cc, err := socks5Handshake(conn, cc, err := socks5Handshake(conn,
selectorSocks5HandshakeOption(opts.Selector), selectorSocks5HandshakeOption(opts.Selector),
userSocks5HandshakeOption(user)) userSocks5HandshakeOption(user),
noTLSSocks5HandshakeOption(opts.NoTLS),
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -285,7 +293,9 @@ func (c *socks5BindConnector) Connect(conn net.Conn, addr string, options ...Con ...@@ -285,7 +293,9 @@ func (c *socks5BindConnector) Connect(conn net.Conn, addr string, options ...Con
} }
cc, err := socks5Handshake(conn, cc, err := socks5Handshake(conn,
selectorSocks5HandshakeOption(opts.Selector), selectorSocks5HandshakeOption(opts.Selector),
userSocks5HandshakeOption(user)) userSocks5HandshakeOption(user),
noTLSSocks5HandshakeOption(opts.NoTLS),
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -435,7 +445,9 @@ func (tr *socks5MuxBindTransporter) initSession(conn net.Conn, addr string, opts ...@@ -435,7 +445,9 @@ func (tr *socks5MuxBindTransporter) initSession(conn net.Conn, addr string, opts
opts = &HandshakeOptions{} opts = &HandshakeOptions{}
} }
cc, err := socks5Handshake(conn, userSocks5HandshakeOption(opts.User)) cc, err := socks5Handshake(conn,
userSocks5HandshakeOption(opts.User),
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -521,7 +533,9 @@ func (c *socks5UDPConnector) Connect(conn net.Conn, addr string, options ...Conn ...@@ -521,7 +533,9 @@ func (c *socks5UDPConnector) Connect(conn net.Conn, addr string, options ...Conn
} }
cc, err := socks5Handshake(conn, cc, err := socks5Handshake(conn,
selectorSocks5HandshakeOption(opts.Selector), selectorSocks5HandshakeOption(opts.Selector),
userSocks5HandshakeOption(user)) userSocks5HandshakeOption(user),
noTLSSocks5HandshakeOption(opts.NoTLS),
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -602,7 +616,9 @@ func (c *socks5UDPTunConnector) Connect(conn net.Conn, addr string, options ...C ...@@ -602,7 +616,9 @@ func (c *socks5UDPTunConnector) Connect(conn net.Conn, addr string, options ...C
} }
cc, err := socks5Handshake(conn, cc, err := socks5Handshake(conn,
selectorSocks5HandshakeOption(opts.Selector), selectorSocks5HandshakeOption(opts.Selector),
userSocks5HandshakeOption(user)) userSocks5HandshakeOption(user),
noTLSSocks5HandshakeOption(opts.NoTLS),
)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment