ssh: handle error in init conn (#264)

This commit is contained in:
nadoo 2021-07-07 19:05:26 +08:00
parent 879e736f01
commit a62674838e
8 changed files with 26 additions and 44 deletions

2
go.mod
View File

@ -9,7 +9,7 @@ require (
github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152
github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect
github.com/insomniacslk/dhcp v0.0.0-20210621130208-1cac67f12b1e
github.com/klauspost/cpuid/v2 v2.0.7 // indirect
github.com/klauspost/cpuid/v2 v2.0.8 // indirect
github.com/klauspost/reedsolomon v1.9.12 // indirect
github.com/mdlayher/raw v0.0.0-20210412142147-51b895745faf // indirect
github.com/nadoo/conflag v0.2.3

4
go.sum
View File

@ -50,8 +50,8 @@ github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
github.com/klauspost/cpuid/v2 v2.0.2/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.7 h1:U89pAFid7wpIWvTFJnMKgU+Sabb7DLEgHI7Xt8apo3Y=
github.com/klauspost/cpuid/v2 v2.0.7/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.8 h1:bhR2mgIlno/Sfk4oUbH4sPlc83z1yGrN9bvqiq3C33I=
github.com/klauspost/cpuid/v2 v2.0.8/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo=
github.com/klauspost/reedsolomon v1.9.12 h1:EyOucRmcrLH+2hqKGdoA5SM8pwPKR6BJsf3r6zpYOA0=
github.com/klauspost/reedsolomon v1.9.12/go.mod h1:nLvuzNvy1ZDNQW30IuMc2ZWCbiqrJgdLoUS2X8HAUVg=

View File

@ -143,18 +143,14 @@ func NewKCPDialer(s string, d proxy.Dialer) (proxy.Dialer, error) {
// NewKCPServer returns a kcp proxy server.
func NewKCPServer(s string, p proxy.Proxy) (proxy.Server, error) {
server, chain := s, ""
if idx := strings.IndexByte(s, ','); idx != -1 {
server, chain = s[:idx], s[idx+1:]
}
k, err := NewKCP(server, nil, p)
schemes := strings.SplitN(s, ",", 2)
k, err := NewKCP(schemes[0], nil, p)
if err != nil {
return nil, err
}
if chain != "" {
k.server, err = proxy.ServerFromURL(chain, p)
if len(schemes) > 1 {
k.server, err = proxy.ServerFromURL(schemes[1], p)
if err != nil {
return nil, err
}

View File

@ -24,12 +24,8 @@ func init() {
// NewSmuxServer returns a smux transport layer before the real server.
func NewSmuxServer(s string, p proxy.Proxy) (proxy.Server, error) {
server, chain := s, ""
if idx := strings.IndexByte(s, ','); idx != -1 {
server, chain = s[:idx], s[idx+1:]
}
u, err := url.Parse(server)
schemes := strings.SplitN(s, ",", 2)
u, err := url.Parse(schemes[0])
if err != nil {
log.F("[smux] parse url err: %s", err)
return nil, err
@ -40,8 +36,8 @@ func NewSmuxServer(s string, p proxy.Proxy) (proxy.Server, error) {
addr: u.Host,
}
if chain != "" {
m.server, err = proxy.ServerFromURL(chain, p)
if len(schemes) > 1 {
m.server, err = proxy.ServerFromURL(schemes[1], p)
if err != nil {
return nil, err
}

View File

@ -116,7 +116,9 @@ func (s *SSH) Dial(network, addr string) (net.Conn, error) {
return c, nil
}
s.sshConn.Close()
s.initConn()
if err := s.initConn(); err != nil {
return nil, err
}
return ssh.NewClient(s.sshConn, s.sshChan, s.sshReq).Dial(network, addr)
}

View File

@ -81,12 +81,8 @@ func NewTLSDialer(s string, d proxy.Dialer) (proxy.Dialer, error) {
// NewTLSServer returns a tls transport layer before the real server.
func NewTLSServer(s string, p proxy.Proxy) (proxy.Server, error) {
server, chain := s, ""
if idx := strings.IndexByte(s, ','); idx != -1 {
server, chain = s[:idx], s[idx+1:]
}
t, err := NewTLS(server, nil, p)
schemes := strings.SplitN(s, ",", 2)
t, err := NewTLS(schemes[0], nil, p)
if err != nil {
return nil, err
}
@ -106,8 +102,8 @@ func NewTLSServer(s string, p proxy.Proxy) (proxy.Server, error) {
MinVersion: stdtls.VersionTLS12,
}
if chain != "" {
t.server, err = proxy.ServerFromURL(chain, p)
if len(schemes) > 1 {
t.server, err = proxy.ServerFromURL(schemes[1], p)
if err != nil {
return nil, err
}

View File

@ -17,18 +17,14 @@ func init() {
// NewUnixServer returns a unix domain socket server.
func NewUnixServer(s string, p proxy.Proxy) (proxy.Server, error) {
server, chain := s, ""
if idx := strings.IndexByte(s, ','); idx != -1 {
server, chain = s[:idx], s[idx+1:]
}
unix, err := NewUnix(server, nil, p)
schemes := strings.SplitN(s, ",", 2)
unix, err := NewUnix(schemes[0], nil, p)
if err != nil {
return nil, err
}
if chain != "" {
unix.server, err = proxy.ServerFromURL(chain, p)
if len(schemes) > 1 {
unix.server, err = proxy.ServerFromURL(schemes[1], p)
if err != nil {
return nil, err
}

View File

@ -18,18 +18,14 @@ func init() {
// NewWSServer returns a ws transport server.
func NewWSServer(s string, p proxy.Proxy) (proxy.Server, error) {
server, chain := s, ""
if idx := strings.IndexByte(s, ','); idx != -1 {
server, chain = s[:idx], s[idx+1:]
}
w, err := NewWS(server, nil, p)
schemes := strings.SplitN(s, ",", 2)
w, err := NewWS(schemes[0], nil, p)
if err != nil {
return nil, err
}
if chain != "" {
w.server, err = proxy.ServerFromURL(chain, p)
if len(schemes) > 1 {
w.server, err = proxy.ServerFromURL(schemes[1], p)
if err != nil {
return nil, err
}