Przeglądaj źródła

Use HTTPS URLTest source

世界 2 lat temu
rodzic
commit
9d32fc9bd1

+ 3 - 0
common/urltest/urltest.go

@@ -50,6 +50,9 @@ func (s *HistoryStorage) StoreURLTestHistory(tag string, history *History) {
 }
 
 func URLTest(ctx context.Context, link string, detour N.Dialer) (t uint16, err error) {
+	if link == "" {
+		link = "https://www.gstatic.com/generate_204"
+	}
 	linkURL, err := url.Parse(link)
 	if err != nil {
 		return

+ 2 - 2
docs/configuration/outbound/urltest.md

@@ -10,7 +10,7 @@
     "proxy-b",
     "proxy-c"
   ],
-  "url": "http://www.gstatic.com/generate_204",
+  "url": "https://www.gstatic.com/generate_204",
   "interval": "1m",
   "tolerance": 50
 }
@@ -26,7 +26,7 @@ List of outbound tags to test.
 
 #### url
 
-The URL to test. `http://www.gstatic.com/generate_204` will be used if empty.
+The URL to test. `https://www.gstatic.com/generate_204` will be used if empty.
 
 #### interval
 

+ 2 - 2
docs/configuration/outbound/urltest.zh.md

@@ -10,7 +10,7 @@
     "proxy-b",
     "proxy-c"
   ],
-  "url": "http://www.gstatic.com/generate_204",
+  "url": "https://www.gstatic.com/generate_204",
   "interval": "1m",
   "tolerance": 50
 }
@@ -26,7 +26,7 @@
 
 #### url
 
-用于测试的链接。默认使用 `http://www.gstatic.com/generate_204`。
+用于测试的链接。默认使用 `https://www.gstatic.com/generate_204`。
 
 #### interval
 

+ 4 - 0
experimental/clashapi/api_meta_group.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"net/http"
 	"strconv"
+	"strings"
 	"sync"
 	"time"
 
@@ -67,6 +68,9 @@ func getGroupDelay(server *Server) func(w http.ResponseWriter, r *http.Request)
 
 		query := r.URL.Query()
 		url := query.Get("url")
+		if strings.HasPrefix(url, "http://") {
+			url = ""
+		}
 		timeout, err := strconv.ParseInt(query.Get("timeout"), 10, 32)
 		if err != nil {
 			render.Status(r, http.StatusBadRequest)

+ 4 - 0
experimental/clashapi/proxies.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"sort"
 	"strconv"
+	"strings"
 	"time"
 
 	"github.com/sagernet/sing-box/adapter"
@@ -214,6 +215,9 @@ func getProxyDelay(server *Server) func(w http.ResponseWriter, r *http.Request)
 	return func(w http.ResponseWriter, r *http.Request) {
 		query := r.URL.Query()
 		url := query.Get("url")
+		if strings.HasPrefix(url, "http://") {
+			url = ""
+		}
 		timeout, err := strconv.ParseInt(query.Get("timeout"), 10, 16)
 		if err != nil {
 			render.Status(r, http.StatusBadRequest)

+ 1 - 1
outbound/builder.go

@@ -54,7 +54,7 @@ func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, t
 	case C.TypeSelector:
 		return NewSelector(router, logger, tag, options.SelectorOptions)
 	case C.TypeURLTest:
-		return NewURLTest(router, logger, tag, options.URLTestOptions)
+		return NewURLTest(ctx, router, logger, tag, options.URLTestOptions)
 	default:
 		return nil, E.New("unknown outbound type: ", options.Type)
 	}

+ 10 - 24
outbound/urltest.go

@@ -26,6 +26,7 @@ var (
 
 type URLTest struct {
 	myOutboundAdapter
+	ctx       context.Context
 	tags      []string
 	link      string
 	interval  time.Duration
@@ -33,7 +34,7 @@ type URLTest struct {
 	group     *URLTestGroup
 }
 
-func NewURLTest(router adapter.Router, logger log.ContextLogger, tag string, options option.URLTestOutboundOptions) (*URLTest, error) {
+func NewURLTest(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.URLTestOutboundOptions) (*URLTest, error) {
 	outbound := &URLTest{
 		myOutboundAdapter: myOutboundAdapter{
 			protocol: C.TypeURLTest,
@@ -41,6 +42,7 @@ func NewURLTest(router adapter.Router, logger log.ContextLogger, tag string, opt
 			logger:   logger,
 			tag:      tag,
 		},
+		ctx:       ctx,
 		tags:      options.Outbounds,
 		link:      options.URL,
 		interval:  time.Duration(options.Interval),
@@ -68,7 +70,7 @@ func (s *URLTest) Start() error {
 		}
 		outbounds = append(outbounds, detour)
 	}
-	s.group = NewURLTestGroup(s.router, s.logger, outbounds, s.link, s.interval, s.tolerance)
+	s.group = NewURLTestGroup(s.ctx, s.router, s.logger, outbounds, s.link, s.interval, s.tolerance)
 	return s.group.Start()
 }
 
@@ -97,14 +99,7 @@ func (s *URLTest) DialContext(ctx context.Context, network string, destination M
 		return conn, nil
 	}
 	s.logger.ErrorContext(ctx, err)
-	go s.group.checkOutbounds()
-	outbounds := s.group.Fallback(outbound)
-	for _, fallback := range outbounds {
-		conn, err = fallback.DialContext(ctx, network, destination)
-		if err == nil {
-			return conn, nil
-		}
-	}
+	s.group.history.DeleteURLTestHistory(outbound.Tag())
 	return nil, err
 }
 
@@ -115,14 +110,7 @@ func (s *URLTest) ListenPacket(ctx context.Context, destination M.Socksaddr) (ne
 		return conn, nil
 	}
 	s.logger.ErrorContext(ctx, err)
-	go s.group.checkOutbounds()
-	outbounds := s.group.Fallback(outbound)
-	for _, fallback := range outbounds {
-		conn, err = fallback.ListenPacket(ctx, destination)
-		if err == nil {
-			return conn, nil
-		}
-	}
+	s.group.history.DeleteURLTestHistory(outbound.Tag())
 	return nil, err
 }
 
@@ -135,6 +123,7 @@ func (s *URLTest) NewPacketConnection(ctx context.Context, conn N.PacketConn, me
 }
 
 type URLTestGroup struct {
+	ctx       context.Context
 	router    adapter.Router
 	logger    log.Logger
 	outbounds []adapter.Outbound
@@ -147,11 +136,7 @@ type URLTestGroup struct {
 	close  chan struct{}
 }
 
-func NewURLTestGroup(router adapter.Router, logger log.Logger, outbounds []adapter.Outbound, link string, interval time.Duration, tolerance uint16) *URLTestGroup {
-	if link == "" {
-		//goland:noinspection HttpUrlsUsage
-		link = "http://www.gstatic.com/generate_204"
-	}
+func NewURLTestGroup(ctx context.Context, router adapter.Router, logger log.Logger, outbounds []adapter.Outbound, link string, interval time.Duration, tolerance uint16) *URLTestGroup {
 	if interval == 0 {
 		interval = C.DefaultURLTestInterval
 	}
@@ -165,6 +150,7 @@ func NewURLTestGroup(router adapter.Router, logger log.Logger, outbounds []adapt
 		history = urltest.NewHistoryStorage()
 	}
 	return &URLTestGroup{
+		ctx:       ctx,
 		router:    router,
 		logger:    logger,
 		outbounds: outbounds,
@@ -254,7 +240,7 @@ func (g *URLTestGroup) loopCheck() {
 }
 
 func (g *URLTestGroup) checkOutbounds() {
-	_, _ = g.URLTest(context.Background(), g.link)
+	_, _ = g.URLTest(g.ctx, g.link)
 }
 
 func (g *URLTestGroup) URLTest(ctx context.Context, link string) (map[string]uint16, error) {