From 09fdd2ac37e6d116554fb8f68df82330d95f49a7 Mon Sep 17 00:00:00 2001 From: sjlleo Date: Sat, 4 Jun 2022 21:25:56 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E7=8E=B0=E5=9C=A8=E5=81=8F=E5=A5=BD?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E3=80=81=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A8=A1=E5=BC=8F=EF=BC=8C=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E5=AF=B9=E9=83=A8=E5=88=86=E6=8F=8F=E8=BF=B0=E4=B8=8D=E5=BD=93?= =?UTF-8?q?=E7=9A=84=E5=8F=82=E6=95=B0=E8=AF=B4=E6=98=8E=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BA=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.go | 24 +++++++++------- config/generate_config.go | 59 +++++++++++++++++++++++++++++++-------- main.go | 19 ++++++++----- 3 files changed, 74 insertions(+), 28 deletions(-) diff --git a/config/config.go b/config/config.go index 585f792..6c06efe 100644 --- a/config/config.go +++ b/config/config.go @@ -3,8 +3,8 @@ package config import "os" type tracerConfig struct { - Token `yaml:"Token"` - Preference `yaml:"Preference"` + Token `yaml:"Token"` + Preference `yaml:"Preference"` } type Token struct { @@ -13,19 +13,23 @@ type Token struct { } type Preference struct { - AlwaysRoutePath bool `yaml:"AlwaysRoutePath"` + NoRDNS bool `yaml:"NoRDNS"` + DataOrigin string `yaml:"DataOrigin"` + AlwaysRoutePath bool `yaml:"AlwaysRoutePath"` + TablePrintDefault bool `yaml:"TablePrintDefault"` + TraceMethod string `yaml:"TraceMethod"` } type configPath func() (string, error) func configFromRunDir() (string, error) { - return "./", nil + return "./", nil } func configFromUserHomeDir() (string, error) { - dir, err := os.UserHomeDir() - if err != nil { - return "", err - } - return dir + "/.nexttrace/", nil -} \ No newline at end of file + dir, err := os.UserHomeDir() + if err != nil { + return "", err + } + return dir + "/.nexttrace/", nil +} diff --git a/config/generate_config.go b/config/generate_config.go index 8d699e7..1b6f33c 100644 --- a/config/generate_config.go +++ b/config/generate_config.go @@ -51,7 +51,9 @@ func AutoGenerate() (*tracerConfig, error) { } preference := Preference{ - AlwaysRoutePath: false, + AlwaysRoutePath: false, + TablePrintDefault: false, + DataOrigin: "LEOMOEAPI", } finalConfig := tracerConfig{ @@ -75,14 +77,14 @@ func AutoGenerate() (*tracerConfig, error) { func Generate() (*tracerConfig, error) { var leotoken string var iPInfoToken string - var routePathEnable string + var tmpInput string - fmt.Println("这是一个配置向导,我们会帮助您生成配置文件,它是一次性的,除非您主动要求重新生成,否则它将不会再出现") + fmt.Println("欢迎使用高阶自定义功能,这是一个配置向导,我们会帮助您生成配置文件。您的配置文件会被放在 ~/.nexttrace/ntraceConfig.yml 中,您也可以通过编辑这个文件来自定义配置。") - fmt.Println("请输入您的LeoMoeAPI Token,如果您没有,请到 Telegram Bot @NextTraceBot 获取一个") + fmt.Println("请输入您的LeoMoeAPI Token,您可以回车,以便继续使用公共Token") fmt.Scanln(&leotoken) if leotoken == "" { - fmt.Println("检测到您的输入为空,您将使用公共Token。这意味着您将和所有使用此Token的客户端共用每分钟150次IP查询的额度") + fmt.Println("检测到您的输入为空,您将使用公共Token。") leotoken = "NextTraceDemo" } @@ -95,12 +97,47 @@ func Generate() (*tracerConfig, error) { } var preference Preference - fmt.Print("您是否希望在每次Traceroute结束后显示Route-Path图? (y/n)") - fmt.Scanln(&routePathEnable) - if routePathEnable == "n" || routePathEnable == "N" || routePathEnable == "no" || routePathEnable == "No" || routePathEnable == "NO" { - preference = Preference{AlwaysRoutePath: false} + var AlwaysRoutePath bool + var tablePrintDefault bool + var dataOrigin string + fmt.Print("我希望默认在路由跟踪完毕后,不绘制Route-Path图 (y/n) [y]") + fmt.Scanln(&tmpInput) + if tmpInput == "n" || tmpInput == "N" || tmpInput == "no" || tmpInput == "No" || tmpInput == "NO" { + AlwaysRoutePath = true } else { - preference = Preference{AlwaysRoutePath: true} + AlwaysRoutePath = false + } + + fmt.Print("我希望路由跟踪默认实时显示,而不使用制表模式 (y/n) [y]") + fmt.Scanln(&tmpInput) + if tmpInput == "n" || tmpInput == "N" || tmpInput == "no" || tmpInput == "No" || tmpInput == "NO" { + tablePrintDefault = true + } else { + tablePrintDefault = false + } + + fmt.Println("请选择默认的IP地理位置API数据源:\n1. LeoMoe\n2. IPInfo\n3. IPInsight\n4. IP.SB\n5. IP-API.COM") + fmt.Print("请输入您的选择:") + fmt.Scanln(&tmpInput) + switch tmpInput { + case "1": + dataOrigin = "LEOMOEAPI" + case "2": + dataOrigin = "IPINFO" + case "3": + dataOrigin = "IPINSIGHT" + case "4": + dataOrigin = "IP.SB" + case "5": + dataOrigin = "IPAPI.COM" + default: + dataOrigin = "LEOMOEAPI" + } + + preference = Preference{ + AlwaysRoutePath: AlwaysRoutePath, + TablePrintDefault: tablePrintDefault, + DataOrigin: dataOrigin, } finalConfig := tracerConfig{ @@ -117,7 +154,7 @@ func Generate() (*tracerConfig, error) { if err = writeFile(yamlData); err != nil { return nil, err } else { - fmt.Println("配置文件创建成功") + fmt.Println("配置文件已经更新,在下次路由跟踪时,将会使用您的偏好。") return &finalConfig, nil } } diff --git a/main.go b/main.go index 668dfdc..76f4381 100644 --- a/main.go +++ b/main.go @@ -24,8 +24,8 @@ var manualConfig = fSet.Bool("c", false, "Manual Config [Advanced]") var numMeasurements = fSet.Int("q", 3, "Set the number of probes per each hop.") var parallelRequests = fSet.Int("r", 18, "Set ParallelRequests number. It should be 1 when there is a multi-routing.") var maxHops = fSet.Int("m", 30, "Set the max number of hops (max TTL to be reached).") -var dataOrigin = fSet.String("d", "LeoMoeAPI", "Choose IP Geograph Data Provider [LeoMoeAPI, IP.SB, IPInfo, IPInsight, IPAPI.com]") -var noRdns = fSet.Bool("n", false, "Do not try to map IP address to host") +var dataOrigin = fSet.String("d", "", "Choose IP Geograph Data Provider [LeoMoeAPI, IP.SB, IPInfo, IPInsight, IPAPI.com]") +var noRdns = fSet.Bool("n", false, "Disable IP Reverse DNS lookup") var routePath = fSet.Bool("report", false, "Route Path") var tablePrint = fSet.Bool("table", false, "Output trace results as table") var ver = fSet.Bool("V", false, "Check Version") @@ -80,14 +80,21 @@ func main() { configData, err := config.Read() // Initialize Default Config - if err != nil { + if err != nil || configData.DataOrigin == "" { if configData, err = config.AutoGenerate(); err != nil { log.Fatal(err) } } + // Set Token from Config ipgeo.SetToken(configData.Token) + // Check Whether User has specified IP Geograph Data Provider + if *dataOrigin == "" { + // Use Default Data Origin with Config + *dataOrigin = configData.DataOrigin + } + ip := util.DomainLookUp(domain) printer.PrintTraceRouteNav(ip, domain, *dataOrigin) @@ -127,15 +134,13 @@ func main() { log.Fatalln(err) } - if (*tcpSYNFlag && *udpPackageFlag) || *tablePrint { + if (*tcpSYNFlag && *udpPackageFlag) || *tablePrint || configData.TablePrintDefault { printer.TracerouteTablePrinter(res) } else if *tcpSYNFlag || *udpPackageFlag { printer.TraceroutePrinter(res) } - p := configData.Preference - - if *routePath || p.AlwaysRoutePath { + if *routePath || configData.AlwaysRoutePath { r := reporter.New(res, ip.String()) r.Print() }