From 8f994ab632d30c6cc47c416866accadf384bb3b4 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Thu, 10 Oct 2024 22:49:56 +0800 Subject: [PATCH] add handle options for sniffer --- config/cmd/cmd.go | 2 +- config/parsing/hop/parse.go | 2 +- config/parsing/node/parse.go | 2 +- config/parsing/service/parse.go | 2 +- connector/http/metadata.go | 2 +- connector/http2/metadata.go | 2 +- connector/relay/metadata.go | 2 +- connector/sni/metadata.go | 2 +- connector/socks/v4/metadata.go | 2 +- connector/socks/v5/metadata.go | 2 +- connector/ss/metadata.go | 2 +- connector/ss/udp/metadata.go | 2 +- connector/tunnel/metadata.go | 2 +- dialer/dtls/metadata.go | 2 +- dialer/grpc/metadata.go | 2 +- dialer/http2/h2/metadata.go | 2 +- dialer/http3/metadata.go | 2 +- dialer/http3/wt/metadata.go | 2 +- dialer/icmp/metadata.go | 2 +- dialer/kcp/metadata.go | 2 +- dialer/mtcp/metadata.go | 2 +- dialer/mtls/metadata.go | 2 +- dialer/mws/metadata.go | 2 +- dialer/obfs/http/metadata.go | 2 +- dialer/obfs/tls/metadata.go | 2 +- dialer/pht/metadata.go | 2 +- dialer/quic/metadata.go | 2 +- dialer/ssh/metadata.go | 2 +- dialer/sshd/metadata.go | 2 +- dialer/tls/metadata.go | 2 +- dialer/ws/metadata.go | 2 +- go.mod | 2 +- go.sum | 4 +- handler/dns/metadata.go | 2 +- handler/file/metadata.go | 2 +- handler/forward/local/metadata.go | 33 ++++- handler/forward/remote/metadata.go | 2 +- handler/http2/metadata.go | 2 +- handler/http3/metadata.go | 2 +- handler/metrics/metadata.go | 2 +- handler/redirect/tcp/handler.go | 28 ++-- handler/redirect/tcp/metadata.go | 2 +- handler/relay/connect.go | 28 ++-- handler/relay/metadata.go | 2 +- handler/serial/metadata.go | 2 +- handler/sni/handler.go | 51 ++++--- handler/sni/metadata.go | 2 +- handler/socks/v4/handler.go | 28 ++-- handler/socks/v4/metadata.go | 2 +- handler/socks/v5/connect.go | 28 ++-- handler/socks/v5/metadata.go | 2 +- handler/ss/handler.go | 28 ++-- handler/ss/metadata.go | 2 +- handler/ss/udp/metadata.go | 2 +- handler/sshd/handler.go | 28 ++-- handler/sshd/metadata.go | 2 +- handler/tap/metadata.go | 2 +- handler/tun/metadata.go | 2 +- handler/tunnel/metadata.go | 2 +- handler/unix/handler.go | 28 ++-- handler/unix/metadata.go | 2 +- internal/util/sniffing/sniffer.go | 206 ++++++++++++++++++++--------- listener/dns/metadata.go | 2 +- listener/dtls/metadata.go | 2 +- listener/ftcp/metadata.go | 2 +- listener/grpc/metadata.go | 2 +- listener/http2/h2/metadata.go | 2 +- listener/http2/metadata.go | 2 +- listener/http3/h3/metadata.go | 2 +- listener/http3/metadata.go | 2 +- listener/http3/wt/metadata.go | 2 +- listener/icmp/metadata.go | 2 +- listener/kcp/metadata.go | 2 +- listener/mtcp/metadata.go | 2 +- listener/mtls/metadata.go | 2 +- listener/mws/metadata.go | 2 +- listener/obfs/http/metadata.go | 2 +- listener/obfs/tls/metadata.go | 2 +- listener/pht/metadata.go | 2 +- listener/quic/metadata.go | 2 +- listener/redirect/tcp/metadata.go | 2 +- listener/redirect/udp/metadata.go | 2 +- listener/rudp/metadata.go | 2 +- listener/serial/metadata.go | 2 +- listener/ssh/metadata.go | 2 +- listener/sshd/metadata.go | 2 +- listener/tap/metadata.go | 2 +- listener/tcp/metadata.go | 2 +- listener/tls/metadata.go | 2 +- listener/tun/metadata.go | 2 +- listener/udp/metadata.go | 2 +- listener/ws/metadata.go | 2 +- selector/filter.go | 2 +- selector/strategy.go | 2 +- 94 files changed, 416 insertions(+), 240 deletions(-) diff --git a/config/cmd/cmd.go b/config/cmd/cmd.go index 1280752e..058562ca 100644 --- a/config/cmd/cmd.go +++ b/config/cmd/cmd.go @@ -10,12 +10,12 @@ import ( "strings" "time" - mdutil "github.com/go-gost/core/metadata/util" "github.com/go-gost/x/config" xnet "github.com/go-gost/x/internal/net" "github.com/go-gost/x/limiter/conn" "github.com/go-gost/x/limiter/traffic" mdx "github.com/go-gost/x/metadata" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/config/parsing/hop/parse.go b/config/parsing/hop/parse.go index bf8b83c7..e2905c96 100644 --- a/config/parsing/hop/parse.go +++ b/config/parsing/hop/parse.go @@ -8,7 +8,6 @@ import ( "github.com/go-gost/core/chain" "github.com/go-gost/core/hop" "github.com/go-gost/core/logger" - mdutil "github.com/go-gost/core/metadata/util" "github.com/go-gost/x/config" "github.com/go-gost/x/config/parsing" bypass_parser "github.com/go-gost/x/config/parsing/bypass" @@ -19,6 +18,7 @@ import ( "github.com/go-gost/x/internal/loader" "github.com/go-gost/x/internal/plugin" "github.com/go-gost/x/metadata" + mdutil "github.com/go-gost/x/metadata/util" ) func ParseHop(cfg *config.HopConfig, log logger.Logger) (hop.Hop, error) { diff --git a/config/parsing/node/parse.go b/config/parsing/node/parse.go index d758dcc9..c49f1dac 100644 --- a/config/parsing/node/parse.go +++ b/config/parsing/node/parse.go @@ -12,7 +12,7 @@ import ( "github.com/go-gost/core/dialer" "github.com/go-gost/core/logger" "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" xauth "github.com/go-gost/x/auth" xchain "github.com/go-gost/x/chain" "github.com/go-gost/x/config" diff --git a/config/parsing/service/parse.go b/config/parsing/service/parse.go index 20a3896f..53a87228 100644 --- a/config/parsing/service/parse.go +++ b/config/parsing/service/parse.go @@ -14,7 +14,7 @@ import ( "github.com/go-gost/core/hop" "github.com/go-gost/core/listener" "github.com/go-gost/core/logger" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/core/observer/stats" "github.com/go-gost/core/recorder" "github.com/go-gost/core/selector" diff --git a/connector/http/metadata.go b/connector/http/metadata.go index 8f25324c..44561201 100644 --- a/connector/http/metadata.go +++ b/connector/http/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/http2/metadata.go b/connector/http2/metadata.go index 362de21a..46ae549a 100644 --- a/connector/http2/metadata.go +++ b/connector/http2/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/relay/metadata.go b/connector/relay/metadata.go index 460eb1b9..2116cb70 100644 --- a/connector/relay/metadata.go +++ b/connector/relay/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/connector/sni/metadata.go b/connector/sni/metadata.go index 4d58e322..0cf06f62 100644 --- a/connector/sni/metadata.go +++ b/connector/sni/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/socks/v4/metadata.go b/connector/socks/v4/metadata.go index 59fc1597..daed5476 100644 --- a/connector/socks/v4/metadata.go +++ b/connector/socks/v4/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/socks/v5/metadata.go b/connector/socks/v5/metadata.go index e6dba391..c73a69d9 100644 --- a/connector/socks/v5/metadata.go +++ b/connector/socks/v5/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/connector/ss/metadata.go b/connector/ss/metadata.go index d5a3b59f..36b098c1 100644 --- a/connector/ss/metadata.go +++ b/connector/ss/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/ss/udp/metadata.go b/connector/ss/udp/metadata.go index 8828edf2..16378875 100644 --- a/connector/ss/udp/metadata.go +++ b/connector/ss/udp/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/connector/tunnel/metadata.go b/connector/tunnel/metadata.go index 51632937..e127f31d 100644 --- a/connector/tunnel/metadata.go +++ b/connector/tunnel/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/relay" "github.com/go-gost/x/internal/util/mux" "github.com/google/uuid" diff --git a/dialer/dtls/metadata.go b/dialer/dtls/metadata.go index 45ad025a..20be6b5c 100644 --- a/dialer/dtls/metadata.go +++ b/dialer/dtls/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/dialer/grpc/metadata.go b/dialer/grpc/metadata.go index 882694b6..c716bd62 100644 --- a/dialer/grpc/metadata.go +++ b/dialer/grpc/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/http2/h2/metadata.go b/dialer/http2/h2/metadata.go index 81277812..fac6e9fe 100644 --- a/dialer/http2/h2/metadata.go +++ b/dialer/http2/h2/metadata.go @@ -4,7 +4,7 @@ import ( "net/http" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/http3/metadata.go b/dialer/http3/metadata.go index b2911083..bd2a6d0b 100644 --- a/dialer/http3/metadata.go +++ b/dialer/http3/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/dialer/http3/wt/metadata.go b/dialer/http3/wt/metadata.go index 529b1748..055207ca 100644 --- a/dialer/http3/wt/metadata.go +++ b/dialer/http3/wt/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/dialer/icmp/metadata.go b/dialer/icmp/metadata.go index da1448f6..329abea9 100644 --- a/dialer/icmp/metadata.go +++ b/dialer/icmp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/kcp/metadata.go b/dialer/kcp/metadata.go index 7e384455..16053d20 100644 --- a/dialer/kcp/metadata.go +++ b/dialer/kcp/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" kcp_util "github.com/go-gost/x/internal/util/kcp" ) diff --git a/dialer/mtcp/metadata.go b/dialer/mtcp/metadata.go index ef230434..2ca0f0ed 100644 --- a/dialer/mtcp/metadata.go +++ b/dialer/mtcp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/dialer/mtls/metadata.go b/dialer/mtls/metadata.go index 0ba7e704..aad7c04a 100644 --- a/dialer/mtls/metadata.go +++ b/dialer/mtls/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/dialer/mws/metadata.go b/dialer/mws/metadata.go index aaea7993..10fd3107 100644 --- a/dialer/mws/metadata.go +++ b/dialer/mws/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/dialer/obfs/http/metadata.go b/dialer/obfs/http/metadata.go index 6b1b2eed..d8211d8b 100644 --- a/dialer/obfs/http/metadata.go +++ b/dialer/obfs/http/metadata.go @@ -4,7 +4,7 @@ import ( "net/http" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/dialer/obfs/tls/metadata.go b/dialer/obfs/tls/metadata.go index 725c04dc..ff571aa3 100644 --- a/dialer/obfs/tls/metadata.go +++ b/dialer/obfs/tls/metadata.go @@ -2,7 +2,7 @@ package tls import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/pht/metadata.go b/dialer/pht/metadata.go index b7526ba9..289738ad 100644 --- a/dialer/pht/metadata.go +++ b/dialer/pht/metadata.go @@ -4,7 +4,7 @@ import ( "strings" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/dialer/quic/metadata.go b/dialer/quic/metadata.go index 9eb59e45..9d386fc0 100644 --- a/dialer/quic/metadata.go +++ b/dialer/quic/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/ssh/metadata.go b/dialer/ssh/metadata.go index 5392ffed..feff279c 100644 --- a/dialer/ssh/metadata.go +++ b/dialer/ssh/metadata.go @@ -6,7 +6,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/mitchellh/go-homedir" "github.com/zalando/go-keyring" "golang.org/x/crypto/ssh" diff --git a/dialer/sshd/metadata.go b/dialer/sshd/metadata.go index bea46a56..394e64a3 100644 --- a/dialer/sshd/metadata.go +++ b/dialer/sshd/metadata.go @@ -6,7 +6,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/mitchellh/go-homedir" "github.com/zalando/go-keyring" "golang.org/x/crypto/ssh" diff --git a/dialer/tls/metadata.go b/dialer/tls/metadata.go index 2c822c26..2fa7f4d3 100644 --- a/dialer/tls/metadata.go +++ b/dialer/tls/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/dialer/ws/metadata.go b/dialer/ws/metadata.go index fac5995b..52b96a48 100644 --- a/dialer/ws/metadata.go +++ b/dialer/ws/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/go.mod b/go.mod index 3fd89f25..bd66e157 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/gin-contrib/cors v1.6.0 github.com/gin-gonic/gin v1.9.1 - github.com/go-gost/core v0.1.5 + github.com/go-gost/core v0.1.6 github.com/go-gost/gosocks4 v0.0.1 github.com/go-gost/gosocks5 v0.4.2 github.com/go-gost/plugin v0.1.1 diff --git a/go.sum b/go.sum index 01a0a883..83b6c35c 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-gost/core v0.1.5 h1:Rbj+xq+q2RkxviUErjwyT8wbqCa5WeV+UelyIs99dFI= -github.com/go-gost/core v0.1.5/go.mod h1:WGI43jOka7FAsSAwi/fSMaqxdR+E339ycb4NBGlFr6A= +github.com/go-gost/core v0.1.6 h1:0Vdck2qrcfi1jz5f7fhfj+Uu0qvZhCdTdIisa5NDa98= +github.com/go-gost/core v0.1.6/go.mod h1:WGI43jOka7FAsSAwi/fSMaqxdR+E339ycb4NBGlFr6A= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= github.com/go-gost/gosocks5 v0.4.2 h1:IianxHTkACPqCwiOAT3MHoMdSUl+SEPSRu1ikawC1Pc= diff --git a/handler/dns/metadata.go b/handler/dns/metadata.go index 4b45e834..0a79cffd 100644 --- a/handler/dns/metadata.go +++ b/handler/dns/metadata.go @@ -6,7 +6,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/handler/file/metadata.go b/handler/file/metadata.go index 7ea4c454..064b34ca 100644 --- a/handler/file/metadata.go +++ b/handler/file/metadata.go @@ -2,7 +2,7 @@ package file import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/handler/forward/local/metadata.go b/handler/forward/local/metadata.go index ef9e675b..cd6305bd 100644 --- a/handler/forward/local/metadata.go +++ b/handler/forward/local/metadata.go @@ -1,16 +1,27 @@ package local import ( + "crypto" + "crypto/tls" + "crypto/x509" "time" + "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" + "github.com/go-gost/x/registry" ) type metadata struct { - readTimeout time.Duration + readTimeout time.Duration + sniffing bool sniffingTimeout time.Duration + + certificate *x509.Certificate + privateKey crypto.PrivateKey + alpn string + mitmBypass bypass.Bypass } func (h *forwardHandler) parseMetadata(md mdata.Metadata) (err error) { @@ -18,7 +29,25 @@ func (h *forwardHandler) parseMetadata(md mdata.Metadata) (err error) { if h.md.readTimeout <= 0 { h.md.readTimeout = 15 * time.Second } + h.md.sniffing = mdutil.GetBool(md, "sniffing") h.md.sniffingTimeout = mdutil.GetDuration(md, "sniffing.timeout") + + certFile := mdutil.GetString(md, "mitm.certFile", "mitm.caCertFile") + keyFile := mdutil.GetString(md, "mitm.keyFile", "mitm.caKeyFile") + if certFile != "" && keyFile != "" { + tlsCert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + h.md.certificate, err = x509.ParseCertificate(tlsCert.Certificate[0]) + if err != nil { + return err + } + h.md.privateKey = tlsCert.PrivateKey + } + h.md.alpn = mdutil.GetString(md, "mitm.alpn") + h.md.mitmBypass = registry.BypassRegistry().Get(mdutil.GetString(md, "mitm.bypass")) + return } diff --git a/handler/forward/remote/metadata.go b/handler/forward/remote/metadata.go index f811e319..d0014213 100644 --- a/handler/forward/remote/metadata.go +++ b/handler/forward/remote/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/handler/http2/metadata.go b/handler/http2/metadata.go index fcd8e9bb..59a7059f 100644 --- a/handler/http2/metadata.go +++ b/handler/http2/metadata.go @@ -6,7 +6,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/handler/http3/metadata.go b/handler/http3/metadata.go index ffe4a6b0..71275444 100644 --- a/handler/http3/metadata.go +++ b/handler/http3/metadata.go @@ -5,7 +5,7 @@ import ( "strings" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/handler/metrics/metadata.go b/handler/metrics/metadata.go index b9da2d87..bff20a40 100644 --- a/handler/metrics/metadata.go +++ b/handler/metrics/metadata.go @@ -2,7 +2,7 @@ package file import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/handler/redirect/tcp/handler.go b/handler/redirect/tcp/handler.go index ecb4c11d..247d7fe0 100644 --- a/handler/redirect/tcp/handler.go +++ b/handler/redirect/tcp/handler.go @@ -162,6 +162,9 @@ func (h *redirectHandler) Handle(ctx context.Context, conn net.Conn, opts ...han } if cc == nil { + if h.options.Bypass != nil && h.options.Bypass.Contains(ctx, "tcp", dstAddr.String()) { + return nil, xbypass.ErrBypass + } var buf bytes.Buffer cc, err = h.options.Router.Dial(ctxvalue.ContextWithBuffer(ctx, &buf), "tcp", dstAddr.String()) ro.Route = buf.String() @@ -170,30 +173,39 @@ func (h *redirectHandler) Handle(ctx context.Context, conn net.Conn, opts ...han return cc, err } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return dial(ctx, network, address) + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: dial, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return dial(ctx, network, address) - }, } conn = xnet.NewReadWriteConn(br, conn, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithBypass(h.options.Bypass), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithBypass(h.options.Bypass), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/redirect/tcp/metadata.go b/handler/redirect/tcp/metadata.go index c2c85e5a..1bb7e10d 100644 --- a/handler/redirect/tcp/metadata.go +++ b/handler/redirect/tcp/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/handler/relay/connect.go b/handler/relay/connect.go index 590c147e..3597290e 100644 --- a/handler/relay/connect.go +++ b/handler/relay/connect.go @@ -154,31 +154,39 @@ func (h *relayHandler) handleConnect(ctx context.Context, conn net.Conn, network conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, rw, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/relay/metadata.go b/handler/relay/metadata.go index 0bbe820f..85bf74e0 100644 --- a/handler/relay/metadata.go +++ b/handler/relay/metadata.go @@ -9,7 +9,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" "github.com/go-gost/x/registry" ) diff --git a/handler/serial/metadata.go b/handler/serial/metadata.go index 4a0f081d..5bde39dd 100644 --- a/handler/serial/metadata.go +++ b/handler/serial/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/handler/sni/handler.go b/handler/sni/handler.go index 50560128..b77aa3bc 100644 --- a/handler/sni/handler.go +++ b/handler/sni/handler.go @@ -112,40 +112,51 @@ func (h *sniHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler. proto, _ := sniffing.Sniff(ctx, br) ro.Proto = proto + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + var buf bytes.Buffer + cc, err := h.options.Router.Dial(ctxvalue.ContextWithBuffer(ctx, &buf), "tcp", address) + ro.Route = buf.String() + return cc, err + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + var buf bytes.Buffer + cc, err := h.options.Router.Dial(ctxvalue.ContextWithBuffer(ctx, &buf), "tcp", address) + ro.Route = buf.String() + if err != nil { + return nil, err + } + cc = tls.Client(cc, cfg) + return cc, nil + } + sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - var buf bytes.Buffer - cc, err := h.options.Router.Dial(ctxvalue.ContextWithBuffer(ctx, &buf), "tcp", address) - ro.Route = buf.String() - return cc, err - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - var buf bytes.Buffer - cc, err := h.options.Router.Dial(ctxvalue.ContextWithBuffer(ctx, &buf), "tcp", address) - ro.Route = buf.String() - if err != nil { - return nil, err - } - cc = tls.Client(cc, cfg) - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, conn, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithBypass(h.options.Bypass), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithBypass(h.options.Bypass), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) default: return errors.New("unknown traffic") } diff --git a/handler/sni/metadata.go b/handler/sni/metadata.go index c4bc8a53..5438d836 100644 --- a/handler/sni/metadata.go +++ b/handler/sni/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/handler/socks/v4/handler.go b/handler/socks/v4/handler.go index 70c8bbbc..ff8304a0 100644 --- a/handler/socks/v4/handler.go +++ b/handler/socks/v4/handler.go @@ -246,31 +246,39 @@ func (h *socks4Handler) handleConnect(ctx context.Context, conn net.Conn, req *g conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, rw, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/socks/v4/metadata.go b/handler/socks/v4/metadata.go index f61d970b..26cf1c68 100644 --- a/handler/socks/v4/metadata.go +++ b/handler/socks/v4/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/handler/socks/v5/connect.go b/handler/socks/v5/connect.go index a1fd4f31..a8e6bb71 100644 --- a/handler/socks/v5/connect.go +++ b/handler/socks/v5/connect.go @@ -91,31 +91,39 @@ func (h *socks5Handler) handleConnect(ctx context.Context, conn net.Conn, networ conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, rw, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/socks/v5/metadata.go b/handler/socks/v5/metadata.go index f0b127a1..b5128c73 100644 --- a/handler/socks/v5/metadata.go +++ b/handler/socks/v5/metadata.go @@ -9,7 +9,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" "github.com/go-gost/x/registry" ) diff --git a/handler/ss/handler.go b/handler/ss/handler.go index 54d892ab..d2dfa5ca 100644 --- a/handler/ss/handler.go +++ b/handler/ss/handler.go @@ -165,31 +165,39 @@ func (h *ssHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler.H conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, conn, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/ss/metadata.go b/handler/ss/metadata.go index f8f74ebe..e1944635 100644 --- a/handler/ss/metadata.go +++ b/handler/ss/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/handler/ss/udp/metadata.go b/handler/ss/udp/metadata.go index a2d4a99b..76408bd3 100644 --- a/handler/ss/udp/metadata.go +++ b/handler/ss/udp/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/handler/sshd/handler.go b/handler/sshd/handler.go index d80b05f1..b961d5a6 100644 --- a/handler/sshd/handler.go +++ b/handler/sshd/handler.go @@ -161,30 +161,38 @@ func (h *forwardHandler) handleDirectForward(ctx context.Context, conn *sshd_uti conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, xnet.NewReadWriteConn(br, conn, conn)) + return sniffer.HandleHTTP(ctx, xnet.NewReadWriteConn(br, conn, conn), + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, xnet.NewReadWriteConn(br, conn, conn)) + return sniffer.HandleTLS(ctx, xnet.NewReadWriteConn(br, conn, conn), + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/sshd/metadata.go b/handler/sshd/metadata.go index 5b24ff90..ba2f56bc 100644 --- a/handler/sshd/metadata.go +++ b/handler/sshd/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/handler/tap/metadata.go b/handler/tap/metadata.go index 48600756..11125fba 100644 --- a/handler/tap/metadata.go +++ b/handler/tap/metadata.go @@ -2,7 +2,7 @@ package tap import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/handler/tun/metadata.go b/handler/tun/metadata.go index 0c173eb1..926ae165 100644 --- a/handler/tun/metadata.go +++ b/handler/tun/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/handler/tunnel/metadata.go b/handler/tunnel/metadata.go index 0ada237f..1130e879 100644 --- a/handler/tunnel/metadata.go +++ b/handler/tunnel/metadata.go @@ -7,7 +7,7 @@ import ( "github.com/go-gost/core/ingress" "github.com/go-gost/core/logger" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/core/sd" "github.com/go-gost/relay" xingress "github.com/go-gost/x/ingress" diff --git a/handler/unix/handler.go b/handler/unix/handler.go index ce3c9c2e..01ddb110 100644 --- a/handler/unix/handler.go +++ b/handler/unix/handler.go @@ -141,31 +141,39 @@ func (h *unixHandler) Handle(ctx context.Context, conn net.Conn, opts ...handler conn.SetReadDeadline(time.Time{}) } + dial := func(ctx context.Context, network, address string) (net.Conn, error) { + return cc, nil + } + dialTLS := func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return cc, nil + } sniffer := &sniffing.Sniffer{ Recorder: h.recorder.Recorder, RecorderOptions: h.recorder.Options, - RecorderObject: ro, Certificate: h.md.certificate, PrivateKey: h.md.privateKey, NegotiatedProtocol: h.md.alpn, CertPool: h.certPool, MitmBypass: h.md.mitmBypass, ReadTimeout: h.md.readTimeout, - Log: log, - Dial: func(ctx context.Context, network, address string) (net.Conn, error) { - return cc, nil - }, - DialTLS: func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return cc, nil - }, } conn = xnet.NewReadWriteConn(br, conn, conn) switch proto { case sniffing.ProtoHTTP: - return sniffer.HandleHTTP(ctx, conn) + return sniffer.HandleHTTP(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) case sniffing.ProtoTLS: - return sniffer.HandleTLS(ctx, conn) + return sniffer.HandleTLS(ctx, conn, + sniffing.WithDial(dial), + sniffing.WithDialTLS(dialTLS), + sniffing.WithRecorderObject(ro), + sniffing.WithLog(log), + ) } } diff --git a/handler/unix/metadata.go b/handler/unix/metadata.go index dabd6372..4430f8bb 100644 --- a/handler/unix/metadata.go +++ b/handler/unix/metadata.go @@ -8,7 +8,7 @@ import ( "github.com/go-gost/core/bypass" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/registry" ) diff --git a/internal/util/sniffing/sniffer.go b/internal/util/sniffing/sniffer.go index 9da3a6de..cddf9979 100644 --- a/internal/util/sniffing/sniffer.go +++ b/internal/util/sniffing/sniffer.go @@ -21,6 +21,7 @@ import ( "github.com/go-gost/core/logger" "github.com/go-gost/core/recorder" dissector "github.com/go-gost/tls-dissector" + xbypass "github.com/go-gost/x/bypass" xio "github.com/go-gost/x/internal/io" xnet "github.com/go-gost/x/internal/net" xhttp "github.com/go-gost/x/internal/net/http" @@ -38,13 +39,50 @@ var ( DefaultCertPool = tls_util.NewMemoryCertPool() ) -type Sniffer struct { +type HandleOptions struct { Dial func(ctx context.Context, network, address string) (net.Conn, error) DialTLS func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) + Bypass bypass.Bypass + RecorderObject *xrecorder.HandlerRecorderObject + Log logger.Logger +} + +type HandleOption func(opts *HandleOptions) + +func WithDial(dial func(ctx context.Context, network, address string) (net.Conn, error)) HandleOption { + return func(opts *HandleOptions) { + opts.Dial = dial + } +} + +func WithDialTLS(dialTLS func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error)) HandleOption { + return func(opts *HandleOptions) { + opts.DialTLS = dialTLS + } +} + +func WithBypass(bypass bypass.Bypass) HandleOption { + return func(opts *HandleOptions) { + opts.Bypass = bypass + } +} + +func WithRecorderObject(ro *xrecorder.HandlerRecorderObject) HandleOption { + return func(opts *HandleOptions) { + opts.RecorderObject = ro + } +} + +func WithLog(log logger.Logger) HandleOption { + return func(opts *HandleOptions) { + opts.Log = log + } +} + +type Sniffer struct { Recorder recorder.Recorder RecorderOptions *recorder.Options - RecorderObject *xrecorder.HandlerRecorderObject // MITM TLS termination Certificate *x509.Certificate @@ -54,21 +92,25 @@ type Sniffer struct { MitmBypass bypass.Bypass ReadTimeout time.Duration - Log logger.Logger } -func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn) error { +func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn, opts ...HandleOption) error { + var o HandleOptions + for _, opt := range opts { + opt(&o) + } + br := bufio.NewReader(conn) req, err := http.ReadRequest(br) if err != nil { return err } - if h.Log.IsLevelEnabled(logger.TraceLevel) { + if o.Log.IsLevelEnabled(logger.TraceLevel) { dump, _ := httputil.DumpRequest(req, false) - h.Log.Trace(string(dump)) + o.Log.Trace(string(dump)) } - ro := h.RecorderObject + ro := o.RecorderObject host := req.Host if host != "" { if _, _, err := net.SplitHostPort(host); err != nil { @@ -76,9 +118,13 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn) error { } ro.Host = host - h.Log = h.Log.WithFields(map[string]any{ + o.Log = o.Log.WithFields(map[string]any{ "host": host, }) + + if o.Bypass != nil && o.Bypass.Contains(ctx, "tcp", host) { + return xbypass.ErrBypass + } } // http/2 @@ -96,35 +142,39 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn) error { ro.Time = time.Time{} + tr := &http2.Transport{ + DialTLSContext: func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error) { + if dial := o.DialTLS; dial != nil { + return dial(ctx, network, addr, cfg) + } + + cc, err := (&net.Dialer{}).DialContext(ctx, network, addr) + if err != nil { + return nil, err + } + + cc = tls.Client(cc, cfg) + return cc, nil + }, + } + defer tr.CloseIdleConnections() + h2s := &http2.Server{} h2s.ServeConn(xnet.NewReadWriteConn(br, conn, conn), &http2.ServeConnOpts{ Context: ctx, SawClientPreface: true, Handler: &h2Handler{ - Client: &http.Client{ - Transport: &http2.Transport{ - DialTLSContext: func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error) { - if dial := h.DialTLS; dial != nil { - return dial(ctx, network, addr, cfg) - } - - cc, err := (&net.Dialer{}).DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - - cc = tls.Client(cc, cfg) - return cc, nil - }, - }, - }, - Sniffer: h, + transport: tr, + recorder: h.Recorder, + recorderOptions: h.RecorderOptions, + recorderObject: ro, + log: o.Log, }, }) return nil } - dial := h.Dial + dial := o.Dial if dial == nil { dial = (&net.Dialer{}).DialContext } @@ -136,7 +186,7 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn) error { ro.Time = time.Time{} - shouldClose, err := h.httpRoundTrip(ctx, conn, cc, req) + shouldClose, err := h.httpRoundTrip(ctx, conn, cc, req, &o) if err != nil || shouldClose { return err } @@ -150,35 +200,35 @@ func (h *Sniffer) HandleHTTP(ctx context.Context, conn net.Conn) error { return err } - if h.Log.IsLevelEnabled(logger.TraceLevel) { + if o.Log.IsLevelEnabled(logger.TraceLevel) { dump, _ := httputil.DumpRequest(req, false) - h.Log.Trace(string(dump)) + o.Log.Trace(string(dump)) } - if shouldClose, err := h.httpRoundTrip(ctx, conn, cc, req); err != nil || shouldClose { + if shouldClose, err := h.httpRoundTrip(ctx, conn, cc, req, &o); err != nil || shouldClose { return err } } } -func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req *http.Request) (close bool, err error) { +func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req *http.Request, o *HandleOptions) (close bool, err error) { close = true ro := &xrecorder.HandlerRecorderObject{} - *ro = *h.RecorderObject + *ro = *o.RecorderObject ro.Time = time.Now() - h.Log.Infof("%s <-> %s", ro.RemoteAddr, req.Host) + o.Log.Infof("%s <-> %s", ro.RemoteAddr, req.Host) defer func() { ro.Duration = time.Since(ro.Time) if err != nil { ro.Err = err.Error() } if err := ro.Record(ctx, h.Recorder); err != nil { - h.Log.Errorf("record: %v", err) + o.Log.Errorf("record: %v", err) } - h.Log.WithFields(map[string]any{ + o.Log.WithFields(map[string]any{ "duration": time.Since(ro.Time), }).Infof("%s >-< %s", ro.RemoteAddr, req.Host) }() @@ -231,7 +281,7 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req * xio.SetReadDeadline(cc, time.Now().Add(h.ReadTimeout)) resp, err := http.ReadResponse(bufio.NewReader(cc), req) if err != nil { - h.Log.Errorf("read response: %v", err) + o.Log.Errorf("read response: %v", err) return } defer resp.Body.Close() @@ -241,9 +291,9 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req * ro.HTTP.Response.Header = resp.Header ro.HTTP.Response.ContentLength = resp.ContentLength - if h.Log.IsLevelEnabled(logger.TraceLevel) { + if o.Log.IsLevelEnabled(logger.TraceLevel) { dump, _ := httputil.DumpResponse(resp, false) - h.Log.Trace(string(dump)) + o.Log.Trace(string(dump)) } // HTTP/1.0 @@ -266,7 +316,7 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req * } if err = resp.Write(rw); err != nil { - h.Log.Errorf("write response: %v", err) + o.Log.Errorf("write response: %v", err) return } @@ -282,14 +332,19 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req * return resp.Close, nil } -func (h *Sniffer) HandleTLS(ctx context.Context, conn net.Conn) error { +func (h *Sniffer) HandleTLS(ctx context.Context, conn net.Conn, opts ...HandleOption) error { + var o HandleOptions + for _, opt := range opts { + opt(&o) + } + buf := new(bytes.Buffer) clientHello, err := dissector.ParseClientHello(io.TeeReader(conn, buf)) if err != nil { return err } - ro := h.RecorderObject + ro := o.RecorderObject ro.TLS = &xrecorder.TLSRecorderObject{ ServerName: clientHello.ServerName, ClientHello: hex.EncodeToString(buf.Bytes()), @@ -304,9 +359,13 @@ func (h *Sniffer) HandleTLS(ctx context.Context, conn net.Conn) error { host = net.JoinHostPort(strings.Trim(host, "[]"), "443") } ro.Host = host + + if o.Bypass != nil && o.Bypass.Contains(ctx, "tcp", host) { + return xbypass.ErrBypass + } } - dial := h.Dial + dial := o.Dial if dial == nil { dial = (&net.Dialer{}).DialContext } @@ -322,7 +381,7 @@ func (h *Sniffer) HandleTLS(ctx context.Context, conn net.Conn) error { host = ro.Host } if h.MitmBypass == nil || !h.MitmBypass.Contains(ctx, "tcp", host) { - return h.terminateTLS(ctx, xnet.NewReadWriteConn(io.MultiReader(buf, conn), conn, conn), cc, clientHello) + return h.terminateTLS(ctx, xnet.NewReadWriteConn(io.MultiReader(buf, conn), conn, conn), cc, clientHello, &o) } } @@ -353,17 +412,18 @@ func (h *Sniffer) HandleTLS(ctx context.Context, conn net.Conn) error { return err } - h.Log.Infof("%s <-> %s", ro.RemoteAddr, ro.Host) + o.Log.Infof("%s <-> %s", ro.RemoteAddr, ro.Host) xnet.Transport(conn, cc) - h.Log.WithFields(map[string]any{ + o.Log.WithFields(map[string]any{ "duration": time.Since(ro.Time), }).Infof("%s >-< %s", ro.RemoteAddr, ro.Host) return err } -func (h *Sniffer) terminateTLS(ctx context.Context, conn, cc net.Conn, clientHello *dissector.ClientHelloInfo) error { - ro := h.RecorderObject +func (h *Sniffer) terminateTLS(ctx context.Context, conn, cc net.Conn, clientHello *dissector.ClientHelloInfo, o *HandleOptions) error { + ro := o.RecorderObject + log := o.Log nextProtos := clientHello.SupportedProtos if h.NegotiatedProtocol != "" { @@ -419,8 +479,20 @@ func (h *Sniffer) terminateTLS(ctx context.Context, conn, cc net.Conn, clientHel serverName = host } cert, err := certPool.Get(serverName) + if cert != nil { + pool := x509.NewCertPool() + pool.AddCert(h.Certificate) + if _, err = cert.Verify(x509.VerifyOptions{ + DNSName: serverName, + Roots: pool, + }); err != nil { + log.Warnf("verify cached certificate for %s: %v", serverName, err) + cert = nil + } + } if cert == nil { cert, err = tls_util.GenerateCertificate(serverName, 7*24*time.Hour, h.Certificate, h.PrivateKey) + certPool.Put(serverName, cert) } if err != nil { return nil, err @@ -436,28 +508,32 @@ func (h *Sniffer) terminateTLS(ctx context.Context, conn, cc net.Conn, clientHel return err } - sniffer := &Sniffer{} - *sniffer = *h - - sniffer.Dial = func(ctx context.Context, network, address string) (net.Conn, error) { - return clientConn, nil + opts := []HandleOption{ + WithDial(func(ctx context.Context, network, address string) (net.Conn, error) { + return clientConn, nil + }), + WithDialTLS(func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { + return clientConn, nil + }), + WithRecorderObject(ro), + WithLog(log), } - sniffer.DialTLS = func(ctx context.Context, network, address string, cfg *tls.Config) (net.Conn, error) { - return clientConn, nil - } - return sniffer.HandleHTTP(ctx, serverConn) + return h.HandleHTTP(ctx, serverConn, opts...) } type h2Handler struct { - Client *http.Client - Sniffer *Sniffer + transport http.RoundTripper + recorder recorder.Recorder + recorderOptions *recorder.Options + recorderObject *xrecorder.HandlerRecorderObject + log logger.Logger } func (h *h2Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - log := h.Sniffer.Log + log := h.log ro := &xrecorder.HandlerRecorderObject{} - *ro = *h.Sniffer.RecorderObject + *ro = *h.recorderObject ro.Time = time.Now() var err error @@ -467,7 +543,7 @@ func (h *h2Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if err != nil { ro.Err = err.Error() } - if err := ro.Record(r.Context(), h.Sniffer.Recorder); err != nil { + if err := ro.Record(r.Context(), h.recorder); err != nil { log.Errorf("record: %v", err) } @@ -510,7 +586,7 @@ func (h *h2Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } var reqBody *xhttp.Body - if opts := h.Sniffer.RecorderOptions; opts != nil && opts.HTTPBody { + if opts := h.recorderOptions; opts != nil && opts.HTTPBody { if req.Body != nil { maxSize := opts.MaxBodySize if maxSize <= 0 { @@ -521,7 +597,7 @@ func (h *h2Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } - resp, err := h.Client.Do(req.WithContext(r.Context())) + resp, err := h.transport.RoundTrip(req.WithContext(r.Context())) if reqBody != nil { ro.HTTP.Request.Body = reqBody.Content() ro.HTTP.Request.ContentLength = reqBody.Length() @@ -546,7 +622,7 @@ func (h *h2Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.WriteHeader(resp.StatusCode) var respBody *xhttp.Body - if opts := h.Sniffer.RecorderOptions; opts != nil && opts.HTTPBody { + if opts := h.recorderOptions; opts != nil && opts.HTTPBody { maxSize := opts.MaxBodySize if maxSize <= 0 { maxSize = DefaultBodySize diff --git a/listener/dns/metadata.go b/listener/dns/metadata.go index 187e6707..47d9051f 100644 --- a/listener/dns/metadata.go +++ b/listener/dns/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/dtls/metadata.go b/listener/dtls/metadata.go index 9641b68f..d10a52e7 100644 --- a/listener/dtls/metadata.go +++ b/listener/dtls/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/ftcp/metadata.go b/listener/ftcp/metadata.go index 8ec5142e..e2715013 100644 --- a/listener/ftcp/metadata.go +++ b/listener/ftcp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/grpc/metadata.go b/listener/grpc/metadata.go index dbf9fc47..3383a357 100644 --- a/listener/grpc/metadata.go +++ b/listener/grpc/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/http2/h2/metadata.go b/listener/http2/h2/metadata.go index 3b0282ab..42672fd8 100644 --- a/listener/http2/h2/metadata.go +++ b/listener/http2/h2/metadata.go @@ -2,7 +2,7 @@ package h2 import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/http2/metadata.go b/listener/http2/metadata.go index 7184c845..5e300153 100644 --- a/listener/http2/metadata.go +++ b/listener/http2/metadata.go @@ -2,7 +2,7 @@ package http2 import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/http3/h3/metadata.go b/listener/http3/h3/metadata.go index 8e699740..c743e318 100644 --- a/listener/http3/h3/metadata.go +++ b/listener/http3/h3/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/http3/metadata.go b/listener/http3/metadata.go index d9766a9b..3b5877e2 100644 --- a/listener/http3/metadata.go +++ b/listener/http3/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/http3/wt/metadata.go b/listener/http3/wt/metadata.go index 6188ef19..ecaa7449 100644 --- a/listener/http3/wt/metadata.go +++ b/listener/http3/wt/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/icmp/metadata.go b/listener/icmp/metadata.go index c6f704b8..1c8f2c69 100644 --- a/listener/icmp/metadata.go +++ b/listener/icmp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/kcp/metadata.go b/listener/kcp/metadata.go index c7472c21..a54146d0 100644 --- a/listener/kcp/metadata.go +++ b/listener/kcp/metadata.go @@ -4,7 +4,7 @@ import ( "encoding/json" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" kcp_util "github.com/go-gost/x/internal/util/kcp" ) diff --git a/listener/mtcp/metadata.go b/listener/mtcp/metadata.go index 9d6458b0..b3014337 100644 --- a/listener/mtcp/metadata.go +++ b/listener/mtcp/metadata.go @@ -2,7 +2,7 @@ package mtcp import ( md "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/listener/mtls/metadata.go b/listener/mtls/metadata.go index fa36de36..749928fb 100644 --- a/listener/mtls/metadata.go +++ b/listener/mtls/metadata.go @@ -2,7 +2,7 @@ package mtls import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/listener/mws/metadata.go b/listener/mws/metadata.go index 17619914..e86ba597 100644 --- a/listener/mws/metadata.go +++ b/listener/mws/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/x/internal/util/mux" ) diff --git a/listener/obfs/http/metadata.go b/listener/obfs/http/metadata.go index 1c46d250..9056a094 100644 --- a/listener/obfs/http/metadata.go +++ b/listener/obfs/http/metadata.go @@ -4,7 +4,7 @@ import ( "net/http" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/obfs/tls/metadata.go b/listener/obfs/tls/metadata.go index 9c8535d5..153a2842 100644 --- a/listener/obfs/tls/metadata.go +++ b/listener/obfs/tls/metadata.go @@ -2,7 +2,7 @@ package tls import ( md "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/pht/metadata.go b/listener/pht/metadata.go index 963feeeb..595dfdf3 100644 --- a/listener/pht/metadata.go +++ b/listener/pht/metadata.go @@ -4,7 +4,7 @@ import ( "strings" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/quic/metadata.go b/listener/quic/metadata.go index eca89039..cec46285 100644 --- a/listener/quic/metadata.go +++ b/listener/quic/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/redirect/tcp/metadata.go b/listener/redirect/tcp/metadata.go index 49180ef2..6137559f 100644 --- a/listener/redirect/tcp/metadata.go +++ b/listener/redirect/tcp/metadata.go @@ -2,7 +2,7 @@ package tcp import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/redirect/udp/metadata.go b/listener/redirect/udp/metadata.go index 9aabd801..60603622 100644 --- a/listener/redirect/udp/metadata.go +++ b/listener/redirect/udp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/rudp/metadata.go b/listener/rudp/metadata.go index bdc2f833..94da2522 100644 --- a/listener/rudp/metadata.go +++ b/listener/rudp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/serial/metadata.go b/listener/serial/metadata.go index 9aef02ca..58604600 100644 --- a/listener/serial/metadata.go +++ b/listener/serial/metadata.go @@ -4,7 +4,7 @@ import ( "time" md "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/ssh/metadata.go b/listener/ssh/metadata.go index c291f9f5..a9f58b8a 100644 --- a/listener/ssh/metadata.go +++ b/listener/ssh/metadata.go @@ -4,7 +4,7 @@ import ( "os" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ssh_util "github.com/go-gost/x/internal/util/ssh" "github.com/mitchellh/go-homedir" "golang.org/x/crypto/ssh" diff --git a/listener/sshd/metadata.go b/listener/sshd/metadata.go index 58fa8fff..b37b2d46 100644 --- a/listener/sshd/metadata.go +++ b/listener/sshd/metadata.go @@ -5,7 +5,7 @@ import ( "os" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ssh_util "github.com/go-gost/x/internal/util/ssh" "github.com/mitchellh/go-homedir" "github.com/zalando/go-keyring" diff --git a/listener/tap/metadata.go b/listener/tap/metadata.go index d69c6ab8..0fe2728e 100644 --- a/listener/tap/metadata.go +++ b/listener/tap/metadata.go @@ -5,7 +5,7 @@ import ( "strings" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" tap_util "github.com/go-gost/x/internal/util/tap" ) diff --git a/listener/tcp/metadata.go b/listener/tcp/metadata.go index 70df7c35..920f4ba4 100644 --- a/listener/tcp/metadata.go +++ b/listener/tcp/metadata.go @@ -2,7 +2,7 @@ package tcp import ( md "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/tls/metadata.go b/listener/tls/metadata.go index aff8b018..51aa9d27 100644 --- a/listener/tls/metadata.go +++ b/listener/tls/metadata.go @@ -2,7 +2,7 @@ package tls import ( mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) type metadata struct { diff --git a/listener/tun/metadata.go b/listener/tun/metadata.go index 6fec2544..5ad6ead4 100644 --- a/listener/tun/metadata.go +++ b/listener/tun/metadata.go @@ -6,7 +6,7 @@ import ( "github.com/go-gost/core/logger" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/core/router" tun_util "github.com/go-gost/x/internal/util/tun" "github.com/go-gost/x/registry" diff --git a/listener/udp/metadata.go b/listener/udp/metadata.go index 494c9ecf..0e736dad 100644 --- a/listener/udp/metadata.go +++ b/listener/udp/metadata.go @@ -4,7 +4,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/listener/ws/metadata.go b/listener/ws/metadata.go index f10d985a..6fef4a72 100644 --- a/listener/ws/metadata.go +++ b/listener/ws/metadata.go @@ -5,7 +5,7 @@ import ( "time" mdata "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" ) const ( diff --git a/selector/filter.go b/selector/filter.go index 9d3785bf..465ba3f5 100644 --- a/selector/filter.go +++ b/selector/filter.go @@ -5,7 +5,7 @@ import ( "time" "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/core/selector" ) diff --git a/selector/strategy.go b/selector/strategy.go index b9ae90fd..6c4a0b67 100644 --- a/selector/strategy.go +++ b/selector/strategy.go @@ -10,7 +10,7 @@ import ( "github.com/go-gost/core/logger" "github.com/go-gost/core/metadata" - mdutil "github.com/go-gost/core/metadata/util" + mdutil "github.com/go-gost/x/metadata/util" "github.com/go-gost/core/selector" ctxvalue "github.com/go-gost/x/ctx" )