]> 127.0.0.1 Git - front/.git/commitdiff
1 v0.1.20250420082128
authorqydysky <qydysky@foxmail.com>
Sun, 20 Apr 2025 08:19:45 +0000 (16:19 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 20 Apr 2025 08:19:45 +0000 (16:19 +0800)
README.md
config.go
go.mod
go.sum
http.go
ws.go

index 9b9afa5bac0f8ccd15df8149b176247a9dda9aca..0ccb90d0e5d30a7efba8a77f9649579044adc37b 100755 (executable)
--- a/README.md
+++ b/README.md
@@ -109,6 +109,7 @@ setting: setting代指下述各配置
 - errBanSec: int 当后端错误时(指连接失败,不指后端错误响应),将会禁用若干秒
 - insecureSkipVerify: bool 忽略不安全的tls证书
 - verifyPeerCer: string 路径,校验服务器证书,使用intermediate_ca
+- proxy: string 使用proxy进行请求,支持`socks5:\\`,`http:\\`,`https:\\`
 
 - filiter:
     - reqUri: 请求后端前,请求路径过滤器
index 5ad010656d457419a9258828da1eba72e061cff2..966cf45c299eee3404e4a437db4b525971ca5c0c 100755 (executable)
--- a/config.go
+++ b/config.go
@@ -506,6 +506,9 @@ func (t *Back) SwapSign(logger Logger) {
        } else {
                t.verifyPeerCer, t.verifyPeerCerErr = os.ReadFile(path)
        }
+       if t.Proxy == "" {
+               t.Proxy = t.route.Proxy
+       }
        if t.lastChosenT.IsZero() {
                t.lastChosenT = time.Now()
        }
@@ -627,6 +630,7 @@ type Setting struct {
        ErrBanSec          int             `json:"errBanSec"`
        InsecureSkipVerify bool            `json:"insecureSkipVerify"`
        VerifyPeerCer      string          `json:"verifyPeerCer"`
+       Proxy              string          `json:"proxy"`
        Filiter            filiter.Filiter `json:"filiter"`
        Dealer             dealer.Dealer   `json:"dealer"`
        verifyPeerCer      []byte
diff --git a/go.mod b/go.mod
index a64185fddd4f9ac384751102a40f316ca59fb24d..a906f9685ba74b053f4dc60d24f1c2eaaf2a66d7 100755 (executable)
--- a/go.mod
+++ b/go.mod
@@ -5,8 +5,8 @@ go 1.24
 require (
        github.com/dustin/go-humanize v1.0.1
        github.com/gorilla/websocket v1.5.3
-       github.com/qydysky/part v0.28.20250328181619
-       golang.org/x/net v0.37.0
+       github.com/qydysky/part v0.28.20250420070720
+       golang.org/x/net v0.39.0
 )
 
 require (
@@ -19,8 +19,8 @@ require (
        github.com/tklauser/go-sysconf v0.3.14 // indirect
        github.com/tklauser/numcpus v0.9.0 // indirect
        github.com/yusufpapurcu/wmi v1.2.4 // indirect
-       golang.org/x/sys v0.31.0 // indirect
-       golang.org/x/text v0.23.0 // indirect
+       golang.org/x/sys v0.32.0 // indirect
+       golang.org/x/text v0.24.0 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
 
diff --git a/go.sum b/go.sum
index 924d6a3af28eb05baafe36441fa605fd19681e6a..3000fd9a62107fe5279c87d2c4112d891d80ed94 100755 (executable)
--- a/go.sum
+++ b/go.sum
@@ -27,8 +27,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/qydysky/brotli v0.0.0-20240828134800-e9913a6e7ed9 h1:k451T+bpsLr+Dq9Ujo+Qtx0iomRA1XXS5ttlEojvfuQ=
 github.com/qydysky/brotli v0.0.0-20240828134800-e9913a6e7ed9/go.mod h1:cI8/gy/wjy2Eb+p2IUj2ZuDnC8R5Vrx3O0VMPvMvphA=
-github.com/qydysky/part v0.28.20250328181619 h1:YaFb1luuYxKoxH7il5non/ILyRL2XGAGWS6Z640QhcM=
-github.com/qydysky/part v0.28.20250328181619/go.mod h1:RHYTy8EbqCP6OioVf6BkvFcfWLNO0S220zl0DDlY84Y=
+github.com/qydysky/part v0.28.20250420070720 h1:8clOjzYMyRCZkIpW4dvL5BsnHeUujWvdIm1cCfRooGM=
+github.com/qydysky/part v0.28.20250420070720/go.mod h1:wp71PQdKYcg9jn9yDDvqC4shS/kzejyvFqbfUxuHocY=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
@@ -43,20 +43,20 @@ github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZ
 github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
 github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
 github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
-golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
+golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
+golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
 golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU=
 golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
-golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
-golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
-golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
-golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
+golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
+golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
+golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
-golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
+golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
+golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
+golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 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/http.go b/http.go
index a7c5f71754ed1c38e2130fe576da0330530134b2..995645d8c53fd40c5f1ad56c7a9190d1a1170a75 100644 (file)
--- a/http.go
+++ b/http.go
@@ -8,6 +8,7 @@ import (
        "fmt"
        "io"
        "net/http"
+       netUrl "net/url"
        "time"
        _ "unsafe"
 
@@ -64,6 +65,12 @@ func (httpDealer) Deal(ctx context.Context, reqId uint32, w http.ResponseWriter,
                InsecureSkipVerify: chosenBack.getInsecureSkipVerify(),
        }
 
+       if chosenBack.Proxy != "" {
+               customTransport.Proxy = func(_ *http.Request) (*netUrl.URL, error) {
+                       return netUrl.Parse(chosenBack.Proxy)
+               }
+       }
+
        if cer, err := chosenBack.getVerifyPeerCer(); err == nil {
                pool := x509.NewCertPool()
                if pool.AppendCertsFromPEM(cer) {
@@ -154,7 +161,9 @@ func (httpDealer) Deal(ctx context.Context, reqId uint32, w http.ResponseWriter,
 
        w.WriteHeader(resp.StatusCode)
 
-       if resp.StatusCode < 200 || resp.StatusCode == 204 || resp.StatusCode == 304 {
+       if resp.StatusCode < 200 ||
+               resp.StatusCode == http.StatusNoContent ||
+               (resp.StatusCode < 400 && resp.StatusCode >= 300) {
                return nil
        }
 
diff --git a/ws.go b/ws.go
index cf088e779ef7e0ba7ca1d322cc2a57bcf3f7f791..7888fd90944afd45f7e1166c69a88cedbf2a0de2 100644 (file)
--- a/ws.go
+++ b/ws.go
@@ -278,8 +278,8 @@ func DialContext(ctx context.Context, urlStr string, requestHeader http.Header,
        }
 
        // If needed, wrap the dial function to connect through a proxy.
-       if d.Proxy != nil {
-               proxyURL, err := d.Proxy(req)
+       if chosenBack.Proxy != "" {
+               proxyURL, err := url.Parse(chosenBack.Proxy)
                if err != nil {
                        return nil, nil, err
                }