diff --git a/.github/workflows/go-cross-build.yml b/.github/workflows/go-cross-build.yml index 7f4e87b..4907fd5 100644 --- a/.github/workflows/go-cross-build.yml +++ b/.github/workflows/go-cross-build.yml @@ -12,7 +12,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.21 - name: Build Cross Platform uses: wzshiming/action-go-build-cross-plantform@v1 - name: Upload Release Assets diff --git a/bridge_test.go b/bridge_test.go index 77b36a8..ee79e62 100644 --- a/bridge_test.go +++ b/bridge_test.go @@ -8,13 +8,17 @@ import ( "net/http" "net/http/httptest" "net/url" + "strings" "testing" "time" _ "github.com/wzshiming/bridge/protocols/command" _ "github.com/wzshiming/bridge/protocols/connect" + _ "github.com/wzshiming/bridge/protocols/emux" _ "github.com/wzshiming/bridge/protocols/netcat" + _ "github.com/wzshiming/bridge/protocols/permuteproxy" _ "github.com/wzshiming/bridge/protocols/shadowsocks" + _ "github.com/wzshiming/bridge/protocols/snappy" _ "github.com/wzshiming/bridge/protocols/socks4" _ "github.com/wzshiming/bridge/protocols/socks5" _ "github.com/wzshiming/bridge/protocols/ssh" @@ -27,6 +31,8 @@ import ( _ "github.com/wzshiming/anyproxy/proxies/sshproxy" "github.com/wzshiming/anyproxy" + "github.com/wzshiming/permuteproxy" + "github.com/wzshiming/bridge/chain" "github.com/wzshiming/bridge/logger" ) @@ -51,30 +57,48 @@ func newProxy(addr string) (uri string, err error) { if err != nil { return "", err } - proxy, err := anyproxy.NewAnyProxy(ctx, []string{addr}, &anyproxy.Config{ - Dialer: &net.Dialer{}, - ListenConfig: &net.ListenConfig{}, - }) - if err != nil { - return "", err - } - host := proxy.Match(u.Host) - listener, err := net.Listen("tcp", u.Host) - if err != nil { - return "", err - } - u.Host = listener.Addr().String() - go func() { - for { - conn, err := listener.Accept() + if strings.Contains(u.Scheme, "+") { + l := &permuteproxy.Proxy{ + ListenConfig: &net.ListenConfig{}, + } + dc, err := l.NewRunner(addr) + if err != nil { + return "", err + } + go func() { + err = dc.Run(ctx) if err != nil { - logger.Std.Error(err, "accept") + logger.Std.Error(err, "run") return } - go host.ServeConn(conn) + }() + return addr, nil + } else { + proxy, err := anyproxy.NewAnyProxy(ctx, []string{addr}, &anyproxy.Config{ + Dialer: &net.Dialer{}, + ListenConfig: &net.ListenConfig{}, + }) + if err != nil { + return "", err } - }() - return u.String(), nil + host := proxy.Match(u.Host) + listener, err := net.Listen("tcp", u.Host) + if err != nil { + return "", err + } + u.Host = listener.Addr().String() + go func() { + for { + conn, err := listener.Accept() + if err != nil { + logger.Std.Error(err, "accept") + return + } + go host.ServeConn(conn) + } + }() + return u.String(), nil + } } var ProxyServer = []string{ @@ -86,6 +110,9 @@ var ProxyServer = []string{ "socks4://s4@127.0.0.1:0", "socks5://s5:p@127.0.0.1:0", "ssh://s:p@127.0.0.1:0", + "http+snappy://127.0.0.1:45670", + "socks4+snappy://127.0.0.1:45671", + "socks5+snappy://127.0.0.1:45672", } func init() { diff --git a/chain/chain.go b/chain/chain.go index 8a73f57..876a0b7 100644 --- a/chain/chain.go +++ b/chain/chain.go @@ -15,8 +15,9 @@ import ( // BridgeChain is a bridger that supports multiple crossing of bridger. type BridgeChain struct { - DialerFunc func(dialer bridge.Dialer) bridge.Dialer - proto map[string]bridge.Bridger + DialerFunc func(dialer bridge.Dialer) bridge.Dialer + proto map[string]bridge.Bridger + defaultProto bridge.Bridger } // NewBridgeChain create a new BridgeChain. @@ -114,7 +115,10 @@ func (b *BridgeChain) dialOne(dialer bridge.Dialer, address string) (bridge.Dial } bridger, ok := b.proto[sch] if !ok { - return nil, fmt.Errorf("unsupported protocol %q", sch) + if b.defaultProto == nil { + return nil, fmt.Errorf("unsupported protocol %q", sch) + } + bridger = b.defaultProto } return bridger.Bridge(dialer, address) } @@ -124,3 +128,8 @@ func (b *BridgeChain) Register(name string, bridger bridge.Bridger) error { b.proto[name] = bridger return nil } + +// RegisterDefault is register a default bridger for BridgeChain. +func (b *BridgeChain) RegisterDefault(bridger bridge.Bridger) { + b.defaultProto = bridger +} diff --git a/cmd/bridge/main.go b/cmd/bridge/main.go index 8a40c82..9386b61 100644 --- a/cmd/bridge/main.go +++ b/cmd/bridge/main.go @@ -12,6 +12,7 @@ import ( _ "github.com/wzshiming/bridge/protocols/connect" _ "github.com/wzshiming/bridge/protocols/emux" _ "github.com/wzshiming/bridge/protocols/netcat" + _ "github.com/wzshiming/bridge/protocols/permuteproxy" _ "github.com/wzshiming/bridge/protocols/shadowsocks" _ "github.com/wzshiming/bridge/protocols/snappy" _ "github.com/wzshiming/bridge/protocols/socks4" diff --git a/go.mod b/go.mod index d9e07e9..f5f5bf2 100644 --- a/go.mod +++ b/go.mod @@ -1,37 +1,40 @@ module github.com/wzshiming/bridge -go 1.18 +go 1.21 require ( - github.com/Microsoft/go-winio v0.5.2 - github.com/go-logr/logr v1.2.2 - github.com/go-logr/zapr v1.2.2 + github.com/Microsoft/go-winio v0.6.1 + github.com/go-logr/logr v1.2.4 + github.com/go-logr/zapr v1.2.4 github.com/golang/snappy v0.0.4 github.com/spf13/pflag v1.0.5 - github.com/wzshiming/anyproxy v0.7.11 - github.com/wzshiming/cmux v0.3.1 + github.com/wzshiming/anyproxy v0.7.12 + github.com/wzshiming/cmux v0.3.2 github.com/wzshiming/commandproxy v0.2.0 github.com/wzshiming/emux v0.2.1 github.com/wzshiming/hostmatcher v0.0.1 - github.com/wzshiming/httpproxy v0.5.3 + github.com/wzshiming/httpproxy v0.5.4 github.com/wzshiming/notify v0.1.1 + github.com/wzshiming/permuteproxy v0.0.2 github.com/wzshiming/schedialer v0.2.1 - github.com/wzshiming/shadowsocks v0.3.2 + github.com/wzshiming/shadowsocks v0.4.0 github.com/wzshiming/socks4 v0.3.2 github.com/wzshiming/socks5 v0.4.2 - github.com/wzshiming/sshproxy v0.4.2 - go.uber.org/zap v1.20.0 + github.com/wzshiming/sshproxy v0.4.3 + go.uber.org/zap v1.26.0 ) require ( github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/wzshiming/sshd v0.2.2 // indirect - github.com/wzshiming/trie v0.1.0 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect - golang.org/x/crypto v0.3.0 // indirect - golang.org/x/net v0.7.0 // indirect + github.com/wzshiming/trie v0.1.1 // indirect + go.uber.org/multierr v1.10.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.6.0 // indirect ) diff --git a/go.sum b/go.sum index 97a51ab..4024639 100644 --- a/go.sum +++ b/go.sum @@ -1,92 +1,100 @@ -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.2 h1:5YNlIL6oZLydaV4dOFjL8YpgXF/tPeTbnpatnu3cq6o= -github.com/go-logr/zapr v1.2.2/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/wzshiming/anyproxy v0.7.11 h1:Ci+SZKBSXbxW/enel0SRL990BNlotFtaAfvBVbdQq28= -github.com/wzshiming/anyproxy v0.7.11/go.mod h1:1HtuqdK9OfSZqxR1dBfkGKO4c1DrfrP6AgK6Fl1UEpk= -github.com/wzshiming/cmux v0.3.1 h1:e19bU4lAiJYhm81XPO0edgfRIP/xIKWeBpozitJy1pA= -github.com/wzshiming/cmux v0.3.1/go.mod h1:TGi/uEBvRkO5+INEwBHiBtqdNWK+wS+OvvS7XtIf4bQ= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/wzshiming/anyproxy v0.7.12 h1:5UvNikzFaDzW8JmC/V0sGmOOWWXbelOs7FYlVt6ltKY= +github.com/wzshiming/anyproxy v0.7.12/go.mod h1:1HtuqdK9OfSZqxR1dBfkGKO4c1DrfrP6AgK6Fl1UEpk= +github.com/wzshiming/cmux v0.3.2 h1:lBEWbfbRqUDdXB6Mro/g35kvCuUEmAgIdpGEuER3bis= +github.com/wzshiming/cmux v0.3.2/go.mod h1:lPhqJN2E3frzkxrPdjesxL09z7nTcuZ6i8Is+2G/Xw4= github.com/wzshiming/commandproxy v0.2.0 h1:uPVhgIj2YSncRUo6g9smGR6OMzsIg7lwklcMHPPmEeM= github.com/wzshiming/commandproxy v0.2.0/go.mod h1:wS6+aJ9KMHciqYX3xmDO0W+QVY0zvngeBvmoIFMfq8A= github.com/wzshiming/emux v0.2.1 h1:pu0oV9PpAJ5cVO8tzkqUXcCqc8xC452vNzQK9cghUis= github.com/wzshiming/emux v0.2.1/go.mod h1:VQF6NoR4nfm3+OrKZLx47JuxuDeWemHDc0a4qDNtFtg= github.com/wzshiming/hostmatcher v0.0.1 h1:vPrUEXsd+khvN5W7I4rJ73vYaUvnBCodvtuyCU+q1HQ= github.com/wzshiming/hostmatcher v0.0.1/go.mod h1:3EyfIDuzQyo0tqrCtcUkD5UvAsdxOUb/RbcYOiPTh1E= -github.com/wzshiming/httpproxy v0.5.3 h1:UVMRXhAmh75di6YCIgSS/oRxof4BYxGyKC29tiqacpY= -github.com/wzshiming/httpproxy v0.5.3/go.mod h1:3uOELdzoCURTWzBbKB8fXHzu4MchESb9ch6bHyChE8o= +github.com/wzshiming/httpproxy v0.5.4 h1:SPY9p3UWPPa/AsCMg1H/DpBBz8PbSUjHFc/a4ueV2zs= +github.com/wzshiming/httpproxy v0.5.4/go.mod h1:KAU986Jsa9Ap+R+RojjGQKvC6NveJ5Y7N1GTVOBM2Ck= github.com/wzshiming/notify v0.1.1 h1:rJXoszrkNglhCVyn/IfW500f5cW03q1q7YzL8hsLchI= github.com/wzshiming/notify v0.1.1/go.mod h1:SFhsQKZJznzsDcj/Qfo9A65k5IRcpUrpgbLRzZEa/DI= +github.com/wzshiming/permuteproxy v0.0.2 h1:svedMueotlxJk9oJfA0gs8WzRYOdgd0DER9XvKpjwlY= +github.com/wzshiming/permuteproxy v0.0.2/go.mod h1:Ny08A1JbuljB8FeJAOiB7dfvRGCVD8PB9hwrALIvYI8= github.com/wzshiming/schedialer v0.2.1 h1:DnAv8ta2UuWcvRy9sYwSt69rTuE3/kiCgwX6CiN5y4M= github.com/wzshiming/schedialer v0.2.1/go.mod h1:TvVxg4QZIBTJzRfmL/G7g6CzynFQKPmtXtSeJ2c4Lus= -github.com/wzshiming/shadowsocks v0.3.2 h1:HfOvOplH/1i1iEAlEDUuUIEuyuVMlgkpTuuvOU9bvIQ= -github.com/wzshiming/shadowsocks v0.3.2/go.mod h1:0nYJmZnIa4y6EYNbGuHHc2BR533EZAKS0HXy8Ir3Ik8= +github.com/wzshiming/shadowsocks v0.4.0 h1:Yi+4J/DK15qdKlssNEMoWjtmc8wyY8ByIBbC5Ft29bQ= +github.com/wzshiming/shadowsocks v0.4.0/go.mod h1:xYRRSKR+hTihSDUOE+evavx0wkLVODTWVXEcz5vosoE= github.com/wzshiming/socks4 v0.3.2 h1:w87nwfgRWteVwIH39nqTur8c+2dcODeLgLrWspcUkSc= github.com/wzshiming/socks4 v0.3.2/go.mod h1:YEPfhjf/4JezwdTmgXZU+UX+A2KvD05quzhsUBVMNA0= github.com/wzshiming/socks5 v0.4.2 h1:C5tdQDbaVGP92ZF8lKv5l6JhWb5z7eHJ/eJp6BIGVL0= github.com/wzshiming/socks5 v0.4.2/go.mod h1:BvCAqlzocQN5xwLjBZDBbvWlrx8sCYSSbHEOf2wZgT0= github.com/wzshiming/sshd v0.2.2 h1:jvKTwG3lCvhObcUiB98MGcca9VGH4+uU89V96YBr7LY= github.com/wzshiming/sshd v0.2.2/go.mod h1:KnH7PobIFZ89iTnhLhFl3KUQNqxFTrO7dyDQ6jctVO8= -github.com/wzshiming/sshproxy v0.4.2 h1:HKlYJgz8f/iYLaY9UyfMOankLpGNaLCpC3DlZBDm4Po= -github.com/wzshiming/sshproxy v0.4.2/go.mod h1:XYf7TaHNWK/wkML1bYT61ofSHZbRw5ncIQd7Lk+FLCM= -github.com/wzshiming/trie v0.1.0 h1:+/icosRlXg7qRp8pQOyd6zD8cPO9cfR4mOJlmI5peq4= -github.com/wzshiming/trie v0.1.0/go.mod h1:c9thxXTh4KcGkejt4sUsO4c5GUmWpxeWzOJ7AZJaI+8= +github.com/wzshiming/sshproxy v0.4.3 h1:RTm/yr0fo9Tx1VpjP1zkVh8ZWWdD2BNwdG/armjbzX8= +github.com/wzshiming/sshproxy v0.4.3/go.mod h1:XYf7TaHNWK/wkML1bYT61ofSHZbRw5ncIQd7Lk+FLCM= +github.com/wzshiming/trie v0.1.1 h1:02AaBSZGhs6Aqljp8fz4xq/Mg8omFBPIlrUS0pJ11ks= +github.com/wzshiming/trie v0.1.1/go.mod h1:c9thxXTh4KcGkejt4sUsO4c5GUmWpxeWzOJ7AZJaI+8= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc= -go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -94,41 +102,38 @@ golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= 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/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 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-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/protocols/permuteproxy/init.go b/protocols/permuteproxy/init.go new file mode 100644 index 0000000..7f90d2d --- /dev/null +++ b/protocols/permuteproxy/init.go @@ -0,0 +1,10 @@ +package permuteproxy + +import ( + "github.com/wzshiming/bridge" + "github.com/wzshiming/bridge/chain" +) + +func init() { + chain.Default.RegisterDefault(bridge.BridgeFunc(PermuteProxy)) +} diff --git a/protocols/permuteproxy/permuteproxy.go b/protocols/permuteproxy/permuteproxy.go new file mode 100644 index 0000000..2dc749d --- /dev/null +++ b/protocols/permuteproxy/permuteproxy.go @@ -0,0 +1,27 @@ +package permuteproxy + +import ( + "github.com/wzshiming/permuteproxy" + "github.com/wzshiming/permuteproxy/protocols/local" + + _ "github.com/wzshiming/permuteproxy/protocols/httpproxy" + _ "github.com/wzshiming/permuteproxy/protocols/local" + _ "github.com/wzshiming/permuteproxy/protocols/shadowsocks" + _ "github.com/wzshiming/permuteproxy/protocols/snappy" + _ "github.com/wzshiming/permuteproxy/protocols/socks4" + _ "github.com/wzshiming/permuteproxy/protocols/socks5" + _ "github.com/wzshiming/permuteproxy/protocols/sshproxy" + _ "github.com/wzshiming/permuteproxy/protocols/tls" + + "github.com/wzshiming/bridge" +) + +func PermuteProxy(dialer bridge.Dialer, addr string) (bridge.Dialer, error) { + l := &permuteproxy.Proxy{ + Dialer: local.LOCAL, + } + if dialer != nil { + l.Dialer = dialer + } + return l.NewDialer(addr) +}