From f6662ab57be1a67691fa6f8977c9fdd2dbf91f87 Mon Sep 17 00:00:00 2001 From: e1732a364fed <75717694+e1732a364fed@users.noreply.github.com> Date: Fri, 6 May 2022 17:33:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86socks5=E7=9A=84dial=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E5=88=B0proxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 被汇报,有人有特殊需求要在内网里dial,那么还是加上socks5的client吧 --- proxy/socks5/client.go | 22 +++++++++++++++++++++- proxy/socks5/server.go | 4 ++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/proxy/socks5/client.go b/proxy/socks5/client.go index 0e130ed..4ab405a 100644 --- a/proxy/socks5/client.go +++ b/proxy/socks5/client.go @@ -3,12 +3,29 @@ package socks5 import ( "io" "net" + "net/url" "github.com/e1732a364fed/v2ray_simple/netLayer" "github.com/e1732a364fed/v2ray_simple/proxy" "github.com/e1732a364fed/v2ray_simple/utils" ) +func init() { + proxy.RegisterClient(Name, &ClientCreator{}) +} + +type ClientCreator struct{} + +func (ClientCreator) NewClientFromURL(*url.URL) (proxy.Client, error) { + s := &Client{} + return s, nil +} + +func (ClientCreator) NewClient(*proxy.DialConf) (proxy.Client, error) { + s := &Client{} + return s, nil +} + type Client struct { proxy.Base } @@ -17,7 +34,7 @@ func (*Client) Name() string { return Name } -func (*Client) Handshake(underlay net.Conn, target netLayer.Addr) (result io.ReadWriteCloser, err error) { +func (*Client) Handshake(underlay net.Conn, firstPayload []byte, target netLayer.Addr) (result io.ReadWriteCloser, err error) { if underlay == nil { panic("socks5 client handshake, nil underlay is not allowed") @@ -62,6 +79,9 @@ func (*Client) Handshake(underlay net.Conn, target netLayer.Addr) (result io.Rea return nil, utils.NumErr{Prefix: "socks5 client handshake failed when reading response", N: 2} } + if len(firstPayload) > 0 { + underlay.Write(firstPayload) + } return underlay, nil diff --git a/proxy/socks5/server.go b/proxy/socks5/server.go index 464a0a5..501d03f 100644 --- a/proxy/socks5/server.go +++ b/proxy/socks5/server.go @@ -32,12 +32,12 @@ type Server struct { type ServerCreator struct{} -func (ServerCreator) NewServerFromURL(u *url.URL) (proxy.Server, error) { +func (ServerCreator) NewServerFromURL(*url.URL) (proxy.Server, error) { s := &Server{} return s, nil } -func (ServerCreator) NewServer(dc *proxy.ListenConf) (proxy.Server, error) { +func (ServerCreator) NewServer(*proxy.ListenConf) (proxy.Server, error) { s := &Server{} return s, nil }