From 69aed470866cd855cf3c30c5066112136be871c6 Mon Sep 17 00:00:00 2001 From: yuzuki999 Date: Tue, 8 Aug 2023 18:24:10 +0800 Subject: [PATCH] support hysteria for sing, remove hy core --- conf/option.go | 7 -- core/hy/config.go | 26 ----- core/hy/hy.go | 49 -------- core/hy/ipmasker.go | 43 ------- core/hy/kploader.go | 95 --------------- core/hy/mmdb.go | 26 ----- core/hy/node.go | 43 ------- core/hy/resolver.go | 123 -------------------- core/hy/server.go | 257 ----------------------------------------- core/hy/server_test.go | 43 ------- core/hy/user.go | 46 -------- core/imports/hy.go | 5 - core/sing/node.go | 9 ++ core/sing/sing.go | 2 + core/sing/user.go | 13 +++ go.mod | 26 +---- go.sum | 63 +--------- 17 files changed, 32 insertions(+), 844 deletions(-) delete mode 100644 core/hy/config.go delete mode 100644 core/hy/hy.go delete mode 100644 core/hy/ipmasker.go delete mode 100644 core/hy/kploader.go delete mode 100644 core/hy/mmdb.go delete mode 100644 core/hy/node.go delete mode 100644 core/hy/resolver.go delete mode 100644 core/hy/server.go delete mode 100644 core/hy/server_test.go delete mode 100644 core/hy/user.go delete mode 100644 core/imports/hy.go diff --git a/conf/option.go b/conf/option.go index 5e0a9fc..a771393 100644 --- a/conf/option.go +++ b/conf/option.go @@ -6,7 +6,6 @@ type Options struct { LimitConfig LimitConfig `yaml:"LimitConfig"` CertConfig *CertConfig `yaml:"CertConfig"` XrayOptions XrayOptions `yaml:"XrayOptions"` - HyOptions HyOptions `yaml:"HyOptions"` SingOptions SingOptions `yaml:"SingOptions"` } @@ -47,9 +46,3 @@ type FallBack struct { Server string `yaml:"Server"` ServerPort string `yaml:"ServerPort"` } - -type HyOptions struct { - Resolver string `yaml:"Resolver"` - ResolvePreference string `yaml:"ResolvePreference"` - SendDevice string `yaml:"SendDevice"` -} diff --git a/core/hy/config.go b/core/hy/config.go deleted file mode 100644 index e7f02d5..0000000 --- a/core/hy/config.go +++ /dev/null @@ -1,26 +0,0 @@ -package hy - -const ( - mbpsToBps = 125000 - minSpeedBPS = 16384 - - DefaultALPN = "hysteria" - - DefaultStreamReceiveWindow = 16777216 // 16 MB - DefaultConnectionReceiveWindow = DefaultStreamReceiveWindow * 5 / 2 // 40 MB - - DefaultMaxIncomingStreams = 1024 - - DefaultMMDBFilename = "GeoLite2-Country.mmdb" - - ServerMaxIdleTimeoutSec = 60 - DefaultClientIdleTimeoutSec = 20 - - DefaultClientHopIntervalSec = 10 -) - -func SpeedTrans(upM, downM int) (uint64, uint64) { - up := uint64(upM) * mbpsToBps - down := uint64(downM) * mbpsToBps - return up, down -} diff --git a/core/hy/hy.go b/core/hy/hy.go deleted file mode 100644 index b09b280..0000000 --- a/core/hy/hy.go +++ /dev/null @@ -1,49 +0,0 @@ -package hy - -import ( - "fmt" - "sync" - - "github.com/InazumaV/V2bX/conf" - vCore "github.com/InazumaV/V2bX/core" - "github.com/hashicorp/go-multierror" -) - -func init() { - vCore.RegisterCore("hy", NewHy) -} - -type Hy struct { - servers sync.Map -} - -func NewHy(_ *conf.CoreConfig) (vCore.Core, error) { - return &Hy{ - servers: sync.Map{}, - }, nil -} - -func (h *Hy) Start() error { - return nil -} - -func (h *Hy) Close() error { - var errs error - h.servers.Range(func(tag, s any) bool { - err := s.(*Server).Close() - if err != nil { - errs = multierror.Append(errs, fmt.Errorf("close %s error: %s", tag, err)) - } - return true - }) - if errs != nil { - return errs - } - return nil -} - -func (h *Hy) Protocols() []string { - return []string{ - "hysteria", - } -} diff --git a/core/hy/ipmasker.go b/core/hy/ipmasker.go deleted file mode 100644 index 46a4549..0000000 --- a/core/hy/ipmasker.go +++ /dev/null @@ -1,43 +0,0 @@ -package hy - -import ( - "net" -) - -type ipMasker struct { - IPv4Mask net.IPMask - IPv6Mask net.IPMask -} - -// Mask masks an address with the configured CIDR. -// addr can be "host:port" or just host. -func (m *ipMasker) Mask(addr string) string { - if m.IPv4Mask == nil && m.IPv6Mask == nil { - return addr - } - - host, port, err := net.SplitHostPort(addr) - if err != nil { - // just host - host, port = addr, "" - } - ip := net.ParseIP(host) - if ip == nil { - // not an IP address, return as is - return addr - } - if ip4 := ip.To4(); ip4 != nil && m.IPv4Mask != nil { - // IPv4 - host = ip4.Mask(m.IPv4Mask).String() - } else if ip6 := ip.To16(); ip6 != nil && m.IPv6Mask != nil { - // IPv6 - host = ip6.Mask(m.IPv6Mask).String() - } - if port != "" { - return net.JoinHostPort(host, port) - } else { - return host - } -} - -var defaultIPMasker = &ipMasker{} diff --git a/core/hy/kploader.go b/core/hy/kploader.go deleted file mode 100644 index d73c097..0000000 --- a/core/hy/kploader.go +++ /dev/null @@ -1,95 +0,0 @@ -package hy - -import ( - "crypto/tls" - "sync" - - "github.com/fsnotify/fsnotify" - "github.com/sirupsen/logrus" -) - -type keypairLoader struct { - certMu sync.RWMutex - cert *tls.Certificate - certPath string - keyPath string -} - -func newKeypairLoader(certPath, keyPath string) (*keypairLoader, error) { - loader := &keypairLoader{ - certPath: certPath, - keyPath: keyPath, - } - cert, err := tls.LoadX509KeyPair(certPath, keyPath) - if err != nil { - return nil, err - } - loader.cert = &cert - watcher, err := fsnotify.NewWatcher() - if err != nil { - return nil, err - } - go func() { - for { - select { - case event, ok := <-watcher.Events: - if !ok { - return - } - switch event.Op { - case fsnotify.Create, fsnotify.Write, fsnotify.Rename, fsnotify.Chmod: - logrus.WithFields(logrus.Fields{ - "file": event.Name, - }).Info("Keypair change detected, reloading...") - if err := loader.load(); err != nil { - logrus.WithFields(logrus.Fields{ - "error": err, - }).Error("Failed to reload keypair") - } else { - logrus.Info("Keypair successfully reloaded") - } - case fsnotify.Remove: - _ = watcher.Add(event.Name) // Workaround for vim - // https://github.com/fsnotify/fsnotify/issues/92 - } - case err, ok := <-watcher.Errors: - if !ok { - return - } - logrus.WithFields(logrus.Fields{ - "error": err, - }).Error("Failed to watch keypair files for changes") - } - } - }() - err = watcher.Add(certPath) - if err != nil { - _ = watcher.Close() - return nil, err - } - err = watcher.Add(keyPath) - if err != nil { - _ = watcher.Close() - return nil, err - } - return loader, nil -} - -func (kpr *keypairLoader) load() error { - cert, err := tls.LoadX509KeyPair(kpr.certPath, kpr.keyPath) - if err != nil { - return err - } - kpr.certMu.Lock() - kpr.cert = &cert - kpr.certMu.Unlock() - return nil -} - -func (kpr *keypairLoader) GetCertificateFunc() func(*tls.ClientHelloInfo) (*tls.Certificate, error) { - return func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) { - kpr.certMu.RLock() - defer kpr.certMu.RUnlock() - return kpr.cert, nil - } -} diff --git a/core/hy/mmdb.go b/core/hy/mmdb.go deleted file mode 100644 index 57cc528..0000000 --- a/core/hy/mmdb.go +++ /dev/null @@ -1,26 +0,0 @@ -package hy - -import ( - "os" - - "github.com/oschwald/geoip2-golang" - "github.com/sirupsen/logrus" -) - -func loadMMDBReader(filename string) (*geoip2.Reader, error) { - if _, err := os.Stat(filename); err != nil { - if os.IsNotExist(err) { - logrus.Info("GeoLite2 database not found, downloading...") - logrus.WithFields(logrus.Fields{ - "file": filename, - }).Info("GeoLite2 database downloaded") - return geoip2.Open(filename) - } else { - // some other error - return nil, err - } - } else { - // file exists, just open it - return geoip2.Open(filename) - } -} diff --git a/core/hy/node.go b/core/hy/node.go deleted file mode 100644 index 47b6eb4..0000000 --- a/core/hy/node.go +++ /dev/null @@ -1,43 +0,0 @@ -package hy - -import ( - "errors" - "fmt" - - "github.com/InazumaV/V2bX/api/panel" - "github.com/InazumaV/V2bX/conf" - "github.com/InazumaV/V2bX/limiter" -) - -func (h *Hy) AddNode(tag string, info *panel.NodeInfo, c *conf.Options) error { - if info.Type != "hysteria" { - return errors.New("the core not support " + info.Type) - } - switch c.CertConfig.CertMode { - case "reality", "none", "": - return errors.New("hysteria need normal tls cert") - } - l, err := limiter.GetLimiter(tag) - if err != nil { - return fmt.Errorf("get limiter error: %s", err) - } - s := NewServer(tag, l) - err = s.runServer(info, c) - if err != nil { - return fmt.Errorf("run hy server error: %s", err) - } - h.servers.Store(tag, s) - return nil -} - -func (h *Hy) DelNode(tag string) error { - if s, e := h.servers.Load(tag); e { - err := s.(*Server).Close() - if err != nil { - return err - } - h.servers.Delete(tag) - return nil - } - return errors.New("the node is not have") -} diff --git a/core/hy/resolver.go b/core/hy/resolver.go deleted file mode 100644 index cc5edd9..0000000 --- a/core/hy/resolver.go +++ /dev/null @@ -1,123 +0,0 @@ -package hy - -import ( - "crypto/tls" - "errors" - "net" - "net/url" - "strings" - - "github.com/Yuzuki616/hysteria/core/utils" - rdns "github.com/folbricht/routedns" -) - -var errInvalidSyntax = errors.New("invalid syntax") - -func setResolver(dns string) error { - if net.ParseIP(dns) != nil { - // Just an IP address, treat as UDP 53 - dns = "udp://" + net.JoinHostPort(dns, "53") - } - var r rdns.Resolver - if strings.HasPrefix(dns, "udp://") { - // Standard UDP DNS resolver - dns = strings.TrimPrefix(dns, "udp://") - if dns == "" { - return errInvalidSyntax - } - if _, _, err := utils.SplitHostPort(dns); err != nil { - // Append the default DNS port - dns = net.JoinHostPort(dns, "53") - } - client, err := rdns.NewDNSClient("dns-udp", dns, "udp", rdns.DNSClientOptions{}) - if err != nil { - return err - } - r = client - } else if strings.HasPrefix(dns, "tcp://") { - // Standard TCP DNS resolver - dns = strings.TrimPrefix(dns, "tcp://") - if dns == "" { - return errInvalidSyntax - } - if _, _, err := utils.SplitHostPort(dns); err != nil { - // Append the default DNS port - dns = net.JoinHostPort(dns, "53") - } - client, err := rdns.NewDNSClient("dns-tcp", dns, "tcp", rdns.DNSClientOptions{}) - if err != nil { - return err - } - r = client - } else if strings.HasPrefix(dns, "https://") { - // DoH resolver - if dohURL, err := url.Parse(dns); err != nil { - return err - } else { - // Need to set bootstrap address to avoid loopback DNS lookup - dohIPAddr, err := net.ResolveIPAddr("ip", dohURL.Hostname()) - if err != nil { - return err - } - client, err := rdns.NewDoHClient("doh", dns, rdns.DoHClientOptions{ - BootstrapAddr: dohIPAddr.String(), - }) - if err != nil { - return err - } - r = client - } - } else if strings.HasPrefix(dns, "tls://") { - // DoT resolver - dns = strings.TrimPrefix(dns, "tls://") - if dns == "" { - return errInvalidSyntax - } - dotHost, _, err := utils.SplitHostPort(dns) - if err != nil { - // Append the default DNS port - dns = net.JoinHostPort(dns, "853") - } - // Need to set bootstrap address to avoid loopback DNS lookup - dotIPAddr, err := net.ResolveIPAddr("ip", dotHost) - if err != nil { - return err - } - client, err := rdns.NewDoTClient("dot", dns, rdns.DoTClientOptions{ - BootstrapAddr: dotIPAddr.String(), - TLSConfig: new(tls.Config), - }) - if err != nil { - return err - } - r = client - } else if strings.HasPrefix(dns, "quic://") { - // DoQ resolver - dns = strings.TrimPrefix(dns, "quic://") - if dns == "" { - return errInvalidSyntax - } - doqHost, _, err := utils.SplitHostPort(dns) - if err != nil { - // Append the default DNS port - dns = net.JoinHostPort(dns, "853") - } - // Need to set bootstrap address to avoid loopback DNS lookup - doqIPAddr, err := net.ResolveIPAddr("ip", doqHost) - if err != nil { - return err - } - client, err := rdns.NewDoQClient("doq", dns, rdns.DoQClientOptions{ - BootstrapAddr: doqIPAddr.String(), - }) - if err != nil { - return err - } - r = client - } else { - return errInvalidSyntax - } - cache := rdns.NewCache("cache", r, rdns.CacheOptions{}) - net.DefaultResolver = rdns.NewNetResolver(cache) - return nil -} diff --git a/core/hy/server.go b/core/hy/server.go deleted file mode 100644 index 7131d12..0000000 --- a/core/hy/server.go +++ /dev/null @@ -1,257 +0,0 @@ -package hy - -import ( - "crypto/tls" - "fmt" - "io" - "net" - "sync" - "sync/atomic" - "time" - - "github.com/InazumaV/V2bX/common/counter" - - "github.com/InazumaV/V2bX/api/panel" - "github.com/InazumaV/V2bX/conf" - "github.com/InazumaV/V2bX/limiter" - "github.com/Yuzuki616/hysteria/core/sockopt" - "github.com/Yuzuki616/quic-go" - - "github.com/Yuzuki616/hysteria/core/acl" - "github.com/Yuzuki616/hysteria/core/cs" - "github.com/Yuzuki616/hysteria/core/pktconns" - "github.com/Yuzuki616/hysteria/core/pmtud" - "github.com/Yuzuki616/hysteria/core/transport" - "github.com/sirupsen/logrus" -) - -var serverPacketConnFuncFactoryMap = map[string]pktconns.ServerPacketConnFuncFactory{ - "": pktconns.NewServerUDPConnFunc, - "udp": pktconns.NewServerUDPConnFunc, - "wechat": pktconns.NewServerWeChatConnFunc, - "wechat-video": pktconns.NewServerWeChatConnFunc, - "faketcp": pktconns.NewServerFakeTCPConnFunc, -} - -type Server struct { - tag string - l *limiter.Limiter - counter *counter.TrafficCounter - users sync.Map - running atomic.Bool - *cs.Server -} - -func NewServer(tag string, l *limiter.Limiter) *Server { - return &Server{ - tag: tag, - l: l, - } -} - -func (s *Server) runServer(node *panel.NodeInfo, c *conf.Options) error { - /*if c.HyOptions == nil { - return errors.New("hy options is not vail") - }*/ - // Resolver - if len(c.HyOptions.Resolver) > 0 { - err := setResolver(c.HyOptions.Resolver) - if err != nil { - return fmt.Errorf("set resolver error: %s", err) - } - } - // tls config - kpl, err := newKeypairLoader(c.CertConfig.CertFile, c.CertConfig.KeyFile) - if err != nil { - return fmt.Errorf("load cert error: %s", err) - } - tlsConfig := &tls.Config{ - GetCertificate: kpl.GetCertificateFunc(), - NextProtos: []string{DefaultALPN}, - MinVersion: tls.VersionTLS13, - } - // QUIC config - quicConfig := &quic.Config{ - InitialStreamReceiveWindow: DefaultStreamReceiveWindow, - MaxStreamReceiveWindow: DefaultStreamReceiveWindow, - InitialConnectionReceiveWindow: DefaultConnectionReceiveWindow, - MaxConnectionReceiveWindow: DefaultConnectionReceiveWindow, - MaxIncomingStreams: int64(DefaultMaxIncomingStreams), - MaxIdleTimeout: ServerMaxIdleTimeoutSec * time.Second, - KeepAlivePeriod: 0, // Keep alive should solely be client's responsibility - DisablePathMTUDiscovery: false, - EnableDatagrams: true, - } - if !quicConfig.DisablePathMTUDiscovery && pmtud.DisablePathMTUDiscovery { - logrus.Info("Path MTU Discovery is not yet supported on this platform") - } - // Resolve preference - if len(c.HyOptions.ResolvePreference) > 0 { - pref, err := transport.ResolvePreferenceFromString(c.HyOptions.Resolver) - if err != nil { - logrus.WithFields(logrus.Fields{ - "error": err, - }).Fatal("Failed to parse the resolve preference") - } - transport.DefaultServerTransport.ResolvePreference = pref - } - /*// SOCKS5 outbound - if config.SOCKS5Outbound.Server != "" { - transport.DefaultServerTransport.SOCKS5Client = transport.NewSOCKS5Client(config.SOCKS5Outbound.Server, - config.SOCKS5Outbound.User, config.SOCKS5Outbound.Password) - }*/ - // Bind outbound - if c.HyOptions.SendDevice != "" { - iface, err := net.InterfaceByName(c.HyOptions.SendDevice) - if err != nil { - logrus.WithFields(logrus.Fields{ - "error": err, - }).Fatal("Failed to find the interface") - } - transport.DefaultServerTransport.LocalUDPIntf = iface - sockopt.BindDialer(transport.DefaultServerTransport.Dialer, iface) - } - if c.SendIP != "" { - ip := net.ParseIP(c.SendIP) - if ip == nil { - logrus.WithFields(logrus.Fields{ - "error": err, - }).Fatal("Failed to parse the address") - } - transport.DefaultServerTransport.Dialer.LocalAddr = &net.TCPAddr{IP: ip} - transport.DefaultServerTransport.LocalUDPAddr = &net.UDPAddr{IP: ip} - } - // ACL - var aclEngine *acl.Engine - // Prometheus - s.counter = counter.NewTrafficCounter() - // Packet conn - pktConnFuncFactory := serverPacketConnFuncFactoryMap[""] - if pktConnFuncFactory == nil { - return fmt.Errorf("unsopport protocol") - } - pktConnFunc := pktConnFuncFactory(node.HyObfs) - addr := fmt.Sprintf("%s:%d", c.ListenIP, node.Port) - pktConn, err := pktConnFunc(addr) - if err != nil { - logrus.WithFields(logrus.Fields{ - "error": err, - "addr": addr, - }).Fatal("Failed to listen on the UDP address") - } - // Server - up, down := SpeedTrans(node.UpMbps, node.DownMbps) - s.Server, err = cs.NewServer(tlsConfig, quicConfig, pktConn, - transport.DefaultServerTransport, up, down, false, aclEngine, - s.connectFunc, s.disconnectFunc, tcpRequestFunc, tcpErrorFunc, udpRequestFunc, udpErrorFunc, s.counter) - if err != nil { - return fmt.Errorf("new server error: %s", err) - } - logrus.WithField("addr", addr).Info("Server up and running") - go func() { - s.running.Store(true) - defer func() { - s.running.Store(false) - }() - err = s.Server.Serve() - if err != nil { - logrus.WithField("addr", addr).Errorf("serve error: %s", err) - } - }() - return nil -} - -func (s *Server) authByUser(addr net.Addr, auth []byte, sSend uint64, sRecv uint64) (bool, string) { - if _, r := s.l.CheckLimit(string(auth), addr.String(), false); r { - return false, "device limited" - } - if _, ok := s.users.Load(string(auth)); ok { - return true, "Done" - } - return false, "Failed" -} - -func (s *Server) connectFunc(addr net.Addr, auth []byte, sSend uint64, sRecv uint64) (bool, string) { - s.l.ConnLimiter.AddConnCount(addr.String(), string(auth), false) - ok, msg := s.authByUser(addr, auth, sSend, sRecv) - if !ok { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - }).Info("Authentication failed, client rejected") - return false, msg - } - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "Uuid": string(auth), - "Tag": s.tag, - }).Info("Client connected") - return ok, msg -} - -func (s *Server) disconnectFunc(addr net.Addr, auth []byte, err error) { - s.l.ConnLimiter.DelConnCount(addr.String(), string(auth)) - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "error": err, - }).Info("Client disconnected") -} - -func tcpRequestFunc(addr net.Addr, auth []byte, reqAddr string, action acl.Action, arg string) { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "dst": defaultIPMasker.Mask(reqAddr), - "action": actionToString(action, arg), - }).Debug("TCP request") -} - -func tcpErrorFunc(addr net.Addr, auth []byte, reqAddr string, err error) { - if err != io.EOF { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "dst": defaultIPMasker.Mask(reqAddr), - "error": err, - }).Info("TCP error") - } else { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "dst": defaultIPMasker.Mask(reqAddr), - }).Debug("TCP EOF") - } -} - -func udpRequestFunc(addr net.Addr, auth []byte, sessionID uint32) { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "session": sessionID, - }).Debug("UDP request") -} - -func udpErrorFunc(addr net.Addr, auth []byte, sessionID uint32, err error) { - if err != io.EOF { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "session": sessionID, - "error": err, - }).Info("UDP error") - } else { - logrus.WithFields(logrus.Fields{ - "src": defaultIPMasker.Mask(addr.String()), - "session": sessionID, - }).Debug("UDP EOF") - } -} - -func actionToString(action acl.Action, arg string) string { - switch action { - case acl.ActionDirect: - return "Direct" - case acl.ActionProxy: - return "Proxy" - case acl.ActionBlock: - return "Block" - case acl.ActionHijack: - return "Hijack to " + arg - default: - return "Unknown" - } -} diff --git a/core/hy/server_test.go b/core/hy/server_test.go deleted file mode 100644 index ec7e29e..0000000 --- a/core/hy/server_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package hy - -import ( - "encoding/base64" - "log" - "testing" - "time" - - "github.com/InazumaV/V2bX/api/panel" - "github.com/InazumaV/V2bX/conf" - "github.com/InazumaV/V2bX/limiter" - "github.com/sirupsen/logrus" -) - -func TestServer(t *testing.T) { - logrus.SetLevel(logrus.DebugLevel) - limiter.Init() - l := limiter.AddLimiter("test", &conf.LimitConfig{}, nil) - s := NewServer("test", l) - t.Log(s.runServer(&panel.NodeInfo{ - Port: 1145, - UpMbps: 100, - DownMbps: 100, - HyObfs: "atresssdaaaadd", - }, &conf.Options{ - ListenIP: "127.0.0.1", - HyOptions: conf.HyOptions{}, - CertConfig: &conf.CertConfig{ - CertFile: "../../test_data/1.pem", - KeyFile: "../../test_data/1.key", - }, - })) - s.users.Store("test1111", struct{}{}) - go func() { - for { - time.Sleep(10 * time.Second) - auth := base64.StdEncoding.EncodeToString([]byte("test1111")) - log.Println(auth) - log.Println(s.counter.GetUpCount(auth)) - } - }() - select {} -} diff --git a/core/hy/user.go b/core/hy/user.go deleted file mode 100644 index 49b2b93..0000000 --- a/core/hy/user.go +++ /dev/null @@ -1,46 +0,0 @@ -package hy - -import ( - "encoding/base64" - "errors" - - "github.com/InazumaV/V2bX/api/panel" - "github.com/InazumaV/V2bX/core" -) - -func (h *Hy) AddUsers(p *core.AddUsersParams) (int, error) { - s, ok := h.servers.Load(p.Tag) - if !ok { - return 0, errors.New("the node not have") - } - u := &s.(*Server).users - for i := range p.UserInfo { - u.Store(p.UserInfo[i].Uuid, struct{}{}) - } - return len(p.UserInfo), nil -} - -func (h *Hy) GetUserTraffic(tag, uuid string, reset bool) (up int64, down int64) { - v, _ := h.servers.Load(tag) - s := v.(*Server) - auth := base64.StdEncoding.EncodeToString([]byte(uuid)) - up = s.counter.GetCounter(auth).UpCounter.Load() - down = s.counter.GetCounter(auth).DownCounter.Load() - if reset { - s.counter.Reset(auth) - } - return -} - -func (h *Hy) DelUsers(users []panel.UserInfo, tag string) error { - v, e := h.servers.Load(tag) - if !e { - return errors.New("the node is not have") - } - s := v.(*Server) - for i := range users { - s.users.Delete(users[i].Uuid) - s.counter.Delete(base64.StdEncoding.EncodeToString([]byte(users[i].Uuid))) - } - return nil -} diff --git a/core/imports/hy.go b/core/imports/hy.go deleted file mode 100644 index 7a80f39..0000000 --- a/core/imports/hy.go +++ /dev/null @@ -1,5 +0,0 @@ -//go:build hy - -package imports - -import _ "github.com/InazumaV/V2bX/core/hy" diff --git a/core/sing/node.go b/core/sing/node.go index 3ca26a4..2bccf4c 100644 --- a/core/sing/node.go +++ b/core/sing/node.go @@ -226,6 +226,15 @@ func getInboundOptions(tag string, info *panel.NodeInfo, c *conf.Options) (optio in.TrojanOptions.FallbackForALPN = fallbackForALPN } } + case "hysteria": + in.Type = "hysteria" + in.HysteriaOptions = option.HysteriaInboundOptions{ + ListenOptions: listen, + UpMbps: info.UpMbps, + DownMbps: info.DownMbps, + Obfs: info.HyObfs, + TLS: &tls, + } } return in, nil } diff --git a/core/sing/sing.go b/core/sing/sing.go index a7189f7..b115c2c 100644 --- a/core/sing/sing.go +++ b/core/sing/sing.go @@ -265,5 +265,7 @@ func (b *Box) Protocols() []string { return []string{ "v2ray", "shadowsocks", + "trojan", + "hysteria", } } diff --git a/core/sing/user.go b/core/sing/user.go index ee7f1cb..d79b1fd 100644 --- a/core/sing/user.go +++ b/core/sing/user.go @@ -59,6 +59,15 @@ func (b *Box) AddUsers(p *core.AddUsersParams) (added int, err error) { } } err = b.inbounds[p.Tag].(*inbound.Trojan).AddUsers(us) + case "hysteria": + us := make([]option.HysteriaUser, len(p.UserInfo)) + for i := range p.UserInfo { + us[i] = option.HysteriaUser{ + Name: p.UserInfo[i].Uuid, + AuthString: p.UserInfo[i].Uuid, + } + } + err = b.inbounds[p.Tag].(*inbound.Hysteria).AddUsers(us) } if err != nil { return 0, err @@ -91,6 +100,10 @@ func (b *Box) DelUsers(users []panel.UserInfo, tag string) error { del = i.(*inbound.VMess) case "shadowsocks": del = i.(*inbound.ShadowsocksMulti) + case "trojan": + del = i.(*inbound.Trojan) + case "hysteria": + del = i.(*inbound.Hysteria) } } else { return errors.New("the inbound not found") diff --git a/go.mod b/go.mod index b03f89c..afa7f71 100644 --- a/go.mod +++ b/go.mod @@ -3,21 +3,18 @@ module github.com/InazumaV/V2bX go 1.19 require ( - github.com/Yuzuki616/hysteria/core v0.0.0-20230722103310-05508b7e5490 - github.com/Yuzuki616/quic-go v0.34.1 github.com/beevik/ntp v1.2.0 github.com/dustin/go-humanize v1.0.1 - github.com/folbricht/routedns v0.1.20 github.com/fsnotify/fsnotify v1.6.0 github.com/go-acme/lego/v4 v4.13.2 github.com/go-chi/chi/v5 v5.0.10 github.com/go-redis/redis/v8 v8.11.5 github.com/go-resty/resty/v2 v2.7.0 github.com/goccy/go-json v0.10.2 + github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/inazumav/sing-box v0.0.0-20230730105931-e8479113c010 + github.com/inazumav/sing-box v0.0.0-20230807112316-1919f54254b5 github.com/juju/ratelimit v1.0.2 - github.com/oschwald/geoip2-golang v1.9.0 github.com/sagernet/sing v0.2.9 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.7.0 @@ -52,7 +49,6 @@ require ( github.com/Dreamacro/clash v1.17.0 // indirect github.com/Dreamacro/protobytes v0.0.0-20230617041236-6500a9f4f158 // indirect github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect - github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755 // indirect github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect @@ -65,7 +61,6 @@ require ( github.com/civo/civogo v0.3.11 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/cloudflare/cloudflare-go v0.70.0 // indirect - github.com/coreos/go-iptables v0.6.0 // indirect github.com/cpu/goacmedns v0.1.1 // indirect github.com/cretz/bine v0.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -90,9 +85,7 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.1 // indirect github.com/gophercloud/gophercloud v1.0.0 // indirect @@ -101,18 +94,17 @@ require ( github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.4 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/infobloxopen/infoblox-go-client v1.1.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/jtacoma/uritemplates v1.0.0 // indirect github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 // indirect github.com/klauspost/compress v1.16.6 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/labbsr0x/bindman-dns-webhook v1.0.2 // indirect github.com/labbsr0x/goh v1.0.1 // indirect @@ -122,11 +114,6 @@ require ( github.com/liquidweb/liquidweb-cli v0.6.9 // indirect github.com/liquidweb/liquidweb-go v1.6.3 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect - github.com/lucas-clemente/quic-go v0.31.1 // indirect - github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect - github.com/marten-seemann/qpack v0.3.0 // indirect - github.com/marten-seemann/qtls-go1-18 v0.1.4 // indirect - github.com/marten-seemann/qtls-go1-19 v0.1.2 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mholt/acmez v1.2.0 // indirect github.com/miekg/dns v1.1.55 // indirect @@ -151,10 +138,6 @@ require ( github.com/oschwald/maxminddb-golang v1.11.0 // indirect github.com/ovh/go-ovh v1.4.1 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect - github.com/pion/dtls/v2 v2.2.4 // indirect - github.com/pion/logging v0.2.2 // indirect - github.com/pion/transport/v2 v2.0.0 // indirect - github.com/pion/udp v0.1.4 // indirect github.com/pires/go-proxyproto v0.7.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -202,9 +185,6 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.490 // indirect github.com/transip/gotransip/v6 v6.20.0 // indirect - github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf // indirect - github.com/txthinking/socks5 v0.0.0-20220212043548-414499347d4a // indirect - github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe // indirect github.com/ultradns/ultradns-go-sdk v1.5.0-20230427130837-23c9b0c // indirect github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e // indirect github.com/vinyldns/go-vinyldns v0.9.16 // indirect diff --git a/go.sum b/go.sum index f40ffa0..1be1e39 100644 --- a/go.sum +++ b/go.sum @@ -73,12 +73,6 @@ github.com/Dreamacro/protobytes v0.0.0-20230617041236-6500a9f4f158/go.mod h1:Qvm github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 h1:xPMsUicZ3iosVPSIP7bW5EcGUzjiiMl1OYTe14y/R24= github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= -github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91 h1:vX+gnvBc56EbWYrmlhYbFYRaeikAke1GL84N4BEYOFE= -github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91/go.mod h1:cDLGBht23g0XQdLjzn6xOGXDkLK182YfINAaZEQLCHQ= -github.com/Yuzuki616/hysteria/core v0.0.0-20230722103310-05508b7e5490 h1:OqS0ywNFR0fEWteLyTcexUNkpdb3vTl5EdMn9gMJMCc= -github.com/Yuzuki616/hysteria/core v0.0.0-20230722103310-05508b7e5490/go.mod h1:Byg39a10tXQ6ysRz5r59YhVMUKgXAThI+0/LcVr+WOE= -github.com/Yuzuki616/quic-go v0.34.1 h1:9Is+Dofzn6qJ9a9t4Ixe4oX7Cb4LU7u4zDozVB8DBDY= -github.com/Yuzuki616/quic-go v0.34.1/go.mod h1:089qZpsXn7CL8kE7G2HurF0bLiZnzQdRIrT7PM0MMQs= github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 h1:F1j7z+/DKEsYqZNoxC6wvfmaiDneLsQOFQmuq9NADSY= github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2/go.mod h1:QlXr/TrICfQ/ANa76sLeQyhAJyNR9sEcfNuZBkY9jgY= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -135,8 +129,6 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk= -github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -186,8 +178,6 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/folbricht/routedns v0.1.20 h1:OCbHLzgcctbp+GRE4QVfnZYd1du3G0muO/Ba9o4QCsw= -github.com/folbricht/routedns v0.1.20/go.mod h1:D8Vd2zJKkIQncvKTBJyed2poKqgpWKFhwIFGdWxnmCQ= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -301,8 +291,6 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -366,8 +354,6 @@ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru/v2 v2.0.1 h1:5pv5N1lT1fjLg2VQ5KWc7kmucp2x/kvFOnxuVTqZ6x4= -github.com/hashicorp/golang-lru/v2 v2.0.1/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= @@ -379,8 +365,8 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df h1:MZf03xP9WdakyXhOWuAD5uPK3wHh96wCsqe3hCMKh8E= github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4= -github.com/inazumav/sing-box v0.0.0-20230730105931-e8479113c010 h1:AbH2HERgLu8Jgi4vHi8aRvkds+biIqxw+Btz3L+XTJY= -github.com/inazumav/sing-box v0.0.0-20230730105931-e8479113c010/go.mod h1:W91us/coe3lvl5jCtw2n6acyagpRbOO16h1IV3/0nrc= +github.com/inazumav/sing-box v0.0.0-20230807112316-1919f54254b5 h1:SJ+GXAuo0EuqU1bJZb4iE1PERAENusx9en2VRMh6/bM= +github.com/inazumav/sing-box v0.0.0-20230807112316-1919f54254b5/go.mod h1:W91us/coe3lvl5jCtw2n6acyagpRbOO16h1IV3/0nrc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -402,8 +388,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtacoma/uritemplates v1.0.0 h1:xwx5sBF7pPAb0Uj8lDC1Q/aBPpOFyQza7OC705ZlLCo= -github.com/jtacoma/uritemplates v1.0.0/go.mod h1:IhIICdE9OcvgUnGwTtJxgBQ+VrTrti5PcbLVSJianO8= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/ratelimit v1.0.2 h1:sRxmtRiajbvrcLQT7S+JbqU0ntsb9W2yhSdNN8tWfaI= github.com/juju/ratelimit v1.0.2/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= @@ -426,6 +410,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -461,22 +446,12 @@ github.com/liquidweb/liquidweb-go v1.6.3 h1:NVHvcnX3eb3BltiIoA+gLYn15nOpkYkdizOE github.com/liquidweb/liquidweb-go v1.6.3/go.mod h1:SuXXp+thr28LnjEw18AYtWwIbWMHSUiajPQs8T9c/Rc= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lucas-clemente/quic-go v0.31.1 h1:O8Od7hfioqq0PMYHDyBkxU2aA7iZ2W9pjbrWuja2YR4= -github.com/lucas-clemente/quic-go v0.31.1/go.mod h1:0wFbizLgYzqHqtlyxyCaJKlE7bYgE6JQ+54TLd/Dq2g= -github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc= -github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE= -github.com/marten-seemann/qpack v0.3.0/go.mod h1:cGfKPBiP4a9EQdxCwEwI/GEeWAsjSekBvx/X8mh58+g= -github.com/marten-seemann/qtls-go1-18 v0.1.4 h1:ogomB+lWV3Vmwiu6RTwDVTMGx+9j7SEi98e8QB35Its= -github.com/marten-seemann/qtls-go1-18 v0.1.4/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= -github.com/marten-seemann/qtls-go1-19 v0.1.2 h1:ZevAEqKXH0bZmoOBPiqX2h5rhQ7cbZi+X+rlq2JUbCE= -github.com/marten-seemann/qtls-go1-19 v0.1.2/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -573,8 +548,6 @@ github.com/ooni/go-libtor v1.1.8/go.mod h1:q1YyLwRD9GeMyeerVvwc0vJ2YgwDLTp2bdVcr github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/oracle/oci-go-sdk v24.3.0+incompatible h1:x4mcfb4agelf1O4/1/auGlZ1lr97jXRSSN5MxTgG/zU= github.com/oracle/oci-go-sdk v24.3.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= -github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc= -github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y= github.com/oschwald/maxminddb-golang v1.11.0 h1:aSXMqYR/EPNjGE8epgqwDay+P30hCBZIveY0WZbAWh0= github.com/oschwald/maxminddb-golang v1.11.0/go.mod h1:YmVI+H0zh3ySFR3w+oz8PCfglAFj3PuCmui13+P9zDg= github.com/ovh/go-ovh v1.4.1 h1:VBGa5wMyQtTP7Zb+w97zRCh9sLtM/2YKRyy+MEJmWaM= @@ -585,14 +558,6 @@ github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTK github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pion/dtls/v2 v2.2.4 h1:YSfYwDQgrxMYXLBc/m7PFY5BVtWlNm/DN4qoU2CbcWg= -github.com/pion/dtls/v2 v2.2.4/go.mod h1:WGKfxqhrddne4Kg3p11FUMJrynkOY4lb25zHNO49wuw= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/transport/v2 v2.0.0 h1:bsMYyqHCbkvHwj+eNCFBuxtlKndKfyGI2vaQmM3fIE4= -github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= -github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8= -github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us= github.com/pires/go-proxyproto v0.7.0 h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs= github.com/pires/go-proxyproto v0.7.0/go.mod h1:Vz/1JPY/OACxWGQNIRY2BeyDmpoaWmEP40O9LbuiFR4= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -645,7 +610,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -789,12 +755,6 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.490/go.mod github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/transip/gotransip/v6 v6.20.0 h1:AuvwyOZ51f2brzMbTqlRy/wmaM3kF7Vx5Wds8xcDflY= github.com/transip/gotransip/v6 v6.20.0/go.mod h1:nzv9eN2tdsUrm5nG5ZX6AugYIU4qgsMwIn2c0EZLk8c= -github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf h1:7PflaKRtU4np/epFxRXlFhlzLXZzKFrH5/I4so5Ove0= -github.com/txthinking/runnergroup v0.0.0-20210608031112-152c7c4432bf/go.mod h1:CLUSJbazqETbaR+i0YAhXBICV9TrKH93pziccMhmhpM= -github.com/txthinking/socks5 v0.0.0-20220212043548-414499347d4a h1:BOqgJ4jku0LHPDoR51RD8Mxmo0LHxCzJT/M9MemYdHo= -github.com/txthinking/socks5 v0.0.0-20220212043548-414499347d4a/go.mod h1:7NloQcrxaZYKURWph5HLxVDlIwMHJXCPkeWPtpftsIg= -github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe h1:gMWxZxBFRAXqoGkwkYlPX2zvyyKNWJpxOxCrjqJkm5A= -github.com/txthinking/x v0.0.0-20210326105829-476fab902fbe/go.mod h1:WgqbSEmUYSjEV3B1qmee/PpP2NYEz4bL9/+mF1ma+s4= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= @@ -879,7 +839,6 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= @@ -900,12 +859,10 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -946,8 +903,6 @@ golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= @@ -1027,9 +982,6 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1039,8 +991,6 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= @@ -1053,8 +1003,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/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.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1088,7 +1036,6 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/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.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=