diff --git a/go.mod b/go.mod index 24453783..b8593d82 100644 --- a/go.mod +++ b/go.mod @@ -12,8 +12,8 @@ require ( github.com/xtaci/kcp-go/v5 v5.6.1 golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee golang.org/x/net v0.0.0-20201010224723-4f7140c49acb // indirect - golang.org/x/sys v0.0.0-20201014080544-cc95f250f6bc // indirect - golang.org/x/tools v0.0.0-20201013201025-64a9e34f3752 // indirect + golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 // indirect + golang.org/x/tools v0.0.0-20201014231627-1610a49f37af // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect ) diff --git a/go.sum b/go.sum index 5cb3ddbf..28a8b686 100644 --- a/go.sum +++ b/go.sum @@ -167,8 +167,8 @@ golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201014080544-cc95f250f6bc h1:HVFDs9bKvTxP6bh1Rj9MCSo+UmafQtI8ZWDPVwVk9g4= -golang.org/x/sys v0.0.0-20201014080544-cc95f250f6bc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -177,8 +177,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200425043458-8463f397d07c h1:iHhCR0b26amDCiiO+kBguKZom9aMF+NrFxh9zeKR/XU= golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201013201025-64a9e34f3752 h1:2ntEwh02rqo2jSsrYmp4yKHHjh0CbXP3ZtSUetSB+q8= -golang.org/x/tools v0.0.0-20201013201025-64a9e34f3752/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201014231627-1610a49f37af h1:VIUWFyOgzG3c0t9KYop5Ybp4m56LupfOnFYX7Ipnz+I= +golang.org/x/tools v0.0.0-20201014231627-1610a49f37af/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= diff --git a/proxy/trojan/client.go b/proxy/trojan/client.go index 9c5650e7..4c03744c 100644 --- a/proxy/trojan/client.go +++ b/proxy/trojan/client.go @@ -91,11 +91,6 @@ func (s *Trojan) dial(network, addr string) (net.Conn, error) { // DialUDP connects to the given address via the proxy. func (s *Trojan) DialUDP(network, addr string) (net.PacketConn, net.Addr, error) { c, err := s.dial("udp", addr) - if err != nil { - return nil, nil, err - } - - pkc := NewPktConn(c, socks.ParseAddr(addr)) // TODO: check the addr in return value - return pkc, nil, nil + return NewPktConn(c, socks.ParseAddr(addr)), nil, err } diff --git a/proxy/trojan/server.go b/proxy/trojan/server.go index 712fbe49..52669f6c 100644 --- a/proxy/trojan/server.go +++ b/proxy/trojan/server.go @@ -98,7 +98,7 @@ func (s *Trojan) Serve(c net.Conn) { cmd, target, err := s.readHeader(io.TeeReader(c, headBuf)) if err != nil { - log.F("[trojan] verify header from %s error: %v", c.RemoteAddr(), err) + // log.F("[trojan] verify header from %s error: %v", c.RemoteAddr(), err) if s.fallback != "" { s.serveFallback(c, s.fallback, headBuf) } diff --git a/proxy/vless/client.go b/proxy/vless/client.go index 9382ee7d..3a8e0a7b 100644 --- a/proxy/vless/client.go +++ b/proxy/vless/client.go @@ -27,8 +27,13 @@ func (s *VLess) Addr() string { // Dial connects to the address addr on the network net via the proxy. func (s *VLess) Dial(network, addr string) (net.Conn, error) { + return s.dial(network, addr) +} + +func (s *VLess) dial(network, addr string) (net.Conn, error) { rc, err := s.dialer.Dial("tcp", s.addr) if err != nil { + log.F("[vless]: dial to %s error: %s", s.addr, err) return nil, err } return NewClientConn(rc, s.uuid, network, addr) @@ -36,18 +41,9 @@ func (s *VLess) Dial(network, addr string) (net.Conn, error) { // DialUDP connects to the given address via the proxy. func (s *VLess) DialUDP(network, addr string) (net.PacketConn, net.Addr, error) { - rc, err := s.dialer.Dial("tcp", s.addr) - if err != nil { - log.F("[vless]: dial to %s error: %s", s.addr, err) - return nil, nil, err - } - - c, err := NewClientConn(rc, s.uuid, network, addr) - if err != nil { - return nil, nil, err - } - - return NewPktConn(c), nil, nil + c, err := s.dial("udp", addr) + // TODO: check the addr in return value + return NewPktConn(c), nil, err } // ClientConn is a vless client connection. diff --git a/proxy/vless/server.go b/proxy/vless/server.go index 7211e3c5..e9ba5113 100644 --- a/proxy/vless/server.go +++ b/proxy/vless/server.go @@ -51,17 +51,17 @@ func (s *VLess) Serve(c net.Conn) { headBuf := pool.GetWriteBuffer() defer pool.PutWriteBuffer(headBuf) - c = NewServerConn(c) - cmd, target, err := s.readHeader(io.TeeReader(c, headBuf)) if err != nil { - log.F("[vless] verify header from %s error: %v", c.RemoteAddr(), err) + // log.F("[vless] verify header from %s error: %v", c.RemoteAddr(), err) if s.fallback != "" { s.serveFallback(c, s.fallback, headBuf) } return } + c = NewServerConn(c) + network := "tcp" dialer := s.proxy.NextDialer(target) @@ -232,7 +232,11 @@ func (c *ServerConn) Write(b []byte) (int, error) { c.sent = true n, err := c.Conn.Write(buf.Bytes()) - return n - 2, err + if n > 2 { + return n - 2, err + } + + return 0, err } return c.Conn.Write(b)