From beb88cc46f01e2215934441287f1a553a9290e16 Mon Sep 17 00:00:00 2001 From: Kr328 Date: Mon, 13 Sep 2021 23:46:39 +0800 Subject: [PATCH] Fix: should not trust address of http.Client (#1616) --- adapter/inbound/http.go | 4 ++-- listener/http/client.go | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/adapter/inbound/http.go b/adapter/inbound/http.go index 94b9fc21..89960cf3 100644 --- a/adapter/inbound/http.go +++ b/adapter/inbound/http.go @@ -9,8 +9,8 @@ import ( ) // NewHTTP receive normal http request and return HTTPContext -func NewHTTP(target string, source net.Addr, conn net.Conn) *context.ConnContext { - metadata := parseSocksAddr(socks5.ParseAddr(target)) +func NewHTTP(target socks5.Addr, source net.Addr, conn net.Conn) *context.ConnContext { + metadata := parseSocksAddr(target) metadata.NetWork = C.TCP metadata.Type = C.HTTP if ip, port, err := parseAddr(source.String()); err == nil { diff --git a/listener/http/client.go b/listener/http/client.go index 3b5fd384..15078b0a 100644 --- a/listener/http/client.go +++ b/listener/http/client.go @@ -9,6 +9,7 @@ import ( "github.com/Dreamacro/clash/adapter/inbound" C "github.com/Dreamacro/clash/constant" + "github.com/Dreamacro/clash/transport/socks5" ) func newClient(source net.Addr, in chan<- C.ConnContext) *http.Client { @@ -25,9 +26,14 @@ func newClient(source net.Addr, in chan<- C.ConnContext) *http.Client { return nil, errors.New("unsupported network " + network) } + dstAddr := socks5.ParseAddr(address) + if dstAddr == nil { + return nil, socks5.ErrAddressNotSupported + } + left, right := net.Pipe() - in <- inbound.NewHTTP(address, source, right) + in <- inbound.NewHTTP(dstAddr, source, right) return left, nil },