From a0ab83c8ed9b7a3f5fa5207a73d21ac565b1355c Mon Sep 17 00:00:00 2001 From: tsosunchia <59512455+tsosunchia@users.noreply.github.com> Date: Sat, 2 Sep 2023 19:43:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=87=E5=AE=9A=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9POW=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=9A=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8F=8A=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ README_zh_CN.md | 12 ++++++++++++ cmd/cmd.go | 5 +++++ util/util.go | 14 ++++++++++++++ wshandle/client.go | 12 ++++++++++-- 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ef0ea85..3b3eceb 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,9 @@ Arguments: IPInfo, IPInsight, IP-API.com, Ip2region, IPInfoLocal, CHUNZHEN, disable-geoip]. Default: LeoMoeAPI + --pow-provider Choose PoW Provider [api.leo.moe, sakura] + For China mainland users, please use + sakura. Default: api.leo.moe -n --no-rdns Do not resolve IP addresses to their domain names -a --always-rdns Always resolve IP addresses to their diff --git a/README_zh_CN.md b/README_zh_CN.md index 01ed97b..eb66689 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -329,6 +329,9 @@ Arguments: IPInfo, IPInsight, IP-API.com, Ip2region, IPInfoLocal, CHUNZHEN, disable-geoip]. Default: LeoMoeAPI + --pow-provider Choose PoW Provider [api.leo.moe, sakura] + For China mainland users, please use + sakura. Default: api.leo.moe -n --no-rdns Do not resolve IP addresses to their domain names -a --always-rdns Always resolve IP addresses to their @@ -392,6 +395,15 @@ NextTrace `LeoMoeAPI`现已使用Proof of Work(POW)机制来防止滥用,其 - [GitHub - tsosunchia/powclient: Proof of Work CLIENT for NextTrace](https://github.com/tsosunchia/powclient) - [GitHub - tsosunchia/powserver: Proof of Work SERVER for NextTrace](https://github.com/tsosunchia/powserver) +对于中国大陆用户,可以使用 [Nya Labs](https://natfrp.com) 提供的位于大陆的POW服务器优化访问速度 +```shell +#使用方法任选其一 +#1. 在环境变量中设置 +export NEXTTRACE_POWPROVIDER=sakura +#2. 在命令行中设置 +nexttrace --pow-provider sakura example.com +``` + ## OpenTrace `OpenTrace`是 @Archeb 开发的`NextTrace`的跨平台`GUI`版本,带来您熟悉但更强大的用户体验。 diff --git a/cmd/cmd.go b/cmd/cmd.go index 6813160..571c0d7 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -41,6 +41,8 @@ func Excute() { maxHops := parser.Int("m", "max-hops", &argparse.Options{Default: 30, Help: "Set the max number of hops (max TTL to be reached)"}) dataOrigin := parser.Selector("d", "data-provider", []string{"Ip2region", "ip2region", "IP.SB", "ip.sb", "IPInfo", "ipinfo", "IPInsight", "ipinsight", "IPAPI.com", "ip-api.com", "IPInfoLocal", "ipinfolocal", "chunzhen", "LeoMoeAPI", "leomoeapi", "disable-geoip"}, &argparse.Options{Default: "LeoMoeAPI", Help: "Choose IP Geograph Data Provider [IP.SB, IPInfo, IPInsight, IP-API.com, Ip2region, IPInfoLocal, CHUNZHEN, disable-geoip]"}) + powProvider := parser.Selector("", "pow-provider", []string{"api.leo.moe", "sakura"}, &argparse.Options{Default: "api.leo.moe", + Help: "Choose PoW Provider [api.leo.moe, sakura] For China mainland users, please use sakura"}) noRdns := parser.Flag("n", "no-rdns", &argparse.Options{Help: "Do not resolve IP addresses to their domain names"}) alwaysRdns := parser.Flag("a", "always-rdns", &argparse.Options{Help: "Always resolve IP addresses to their domain names"}) routePath := parser.Flag("P", "route-path", &argparse.Options{Help: "Print traceroute hop path by ASN and location"}) @@ -155,6 +157,9 @@ func Excute() { // defer wg.Done() if strings.ToUpper(*dataOrigin) == "LEOMOEAPI" { val, ok := os.LookupEnv("NEXTTRACE_DATAPROVIDER") + if strings.ToUpper(*powProvider) != "API.LEO.MOE" { + util.PowProviderParam = *powProvider + } if ok { *dataOrigin = val } else { diff --git a/util/util.go b/util/util.go index 27afdce..4f176b8 100644 --- a/util/util.go +++ b/util/util.go @@ -19,6 +19,7 @@ var Uninterrupted = GetenvDefault("NEXTTRACE_UNINTERRUPTED", "") var EnvToken = GetenvDefault("NEXTTRACE_TOKEN", "") var UserAgent = fmt.Sprintf("NextTrace %s/%s/%s", config.Version, runtime.GOOS, runtime.GOARCH) var RdnsCache sync.Map +var PowProviderParam = "" func LookupAddr(addr string) ([]string, error) { // 如果在缓存中找到,直接返回 @@ -196,3 +197,16 @@ func GetProxy() *url.URL { } return proxyURL } + +func GetPowProvider() string { + var powProvider = "" + if PowProviderParam == "" { + powProvider = GetenvDefault("NEXTTRACE_POWPROVIDER", "api.leo.moe") + } else { + powProvider = PowProviderParam + } + if powProvider == "sakura" { + return "pow.nexttrace.owo.13a.com" + } + return "" +} diff --git a/wshandle/client.go b/wshandle/client.go index 2802b45..52cb692 100644 --- a/wshandle/client.go +++ b/wshandle/client.go @@ -127,7 +127,11 @@ func (c *WsConn) recreateWsConn() { // 无环境变量 token if cacheToken == "" { // 无cacheToken, 重新获取 token - jwtToken, err = pow.GetToken(fastIp, host, port) + if util.GetPowProvider() == "" { + jwtToken, err = pow.GetToken(fastIp, host, port) + } else { + jwtToken, err = pow.GetToken(util.GetPowProvider(), util.GetPowProvider(), port) + } if err != nil { log.Println(err) os.Exit(1) @@ -191,7 +195,11 @@ func createWsConn() *WsConn { jwtToken, ua := envToken, []string{"Privileged Client"} err := error(nil) if envToken == "" { - jwtToken, err = pow.GetToken(fastIp, host, port) + if util.GetPowProvider() == "" { + jwtToken, err = pow.GetToken(fastIp, host, port) + } else { + jwtToken, err = pow.GetToken(util.GetPowProvider(), util.GetPowProvider(), port) + } if err != nil { log.Println(err) os.Exit(1)