From cfc8034cb4a38ad5bad0fbc2a64268b11769d822 Mon Sep 17 00:00:00 2001 From: zhshch2002 Date: Fri, 27 May 2022 10:26:32 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E5=85=81=E8=AE=B8=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=90=8E=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 53 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/main.go b/main.go index 03c88207..ab363fbf 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "strings" "time" "github.com/xgadget-lab/nexttrace/ipgeo" @@ -14,31 +15,47 @@ import ( "github.com/xgadget-lab/nexttrace/util" ) -var tcpSYNFlag = flag.Bool("T", false, "Use TCP SYN for tracerouting (default port is 80)") -var udpPackageFlag = flag.Bool("U", false, "Use UDP Package for tracerouting (default port is 53 in UDP)") -var port = flag.Int("p", 80, "Set SYN Traceroute Port") -var numMeasurements = flag.Int("q", 3, "Set the number of probes per each hop.") -var parallelRequests = flag.Int("r", 18, "Set ParallelRequests number. It should be 1 when there is a multi-routing.") -var maxHops = flag.Int("m", 30, "Set the max number of hops (max TTL to be reached).") -var dataOrigin = flag.String("d", "LeoMoeAPI", "Choose IP Geograph Data Provider [LeoMoeAPI, IP.SB, IPInfo, IPInsight]") -var rdnsenable = flag.Bool("rdns", false, "Set whether rDNS will be display") -var routePath = flag.Bool("report", false, "Route Path") -var realtimePrint = flag.Bool("realtime", false, "Output trace results in runtime") -var tablePrint = flag.Bool("table", false, "Output trace results as table") -var ver = flag.Bool("V", false, "Check Version") +var fSet = flag.NewFlagSet("", flag.ExitOnError) +var tcpSYNFlag = fSet.Bool("T", false, "Use TCP SYN for tracerouting (default port is 80)") +var udpPackageFlag = fSet.Bool("U", false, "Use UDP Package for tracerouting (default port is 53 in UDP)") +var port = fSet.Int("p", -1, "Set SYN Traceroute Port") +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]") +var rdnsenable = fSet.Bool("rdns", false, "Set whether rDNS will be display") +var routePath = fSet.Bool("report", false, "Route Path") +var realtimePrint = fSet.Bool("realtime", false, "Output trace results in runtime") +var tablePrint = fSet.Bool("table", false, "Output trace results as table") +var ver = fSet.Bool("V", false, "Check Version") + +func printArgHelp() { + fmt.Println("\nArgs Error\nUsage : 'nexttrace [option...] ' or 'nexttrace [option...]'") + fSet.PrintDefaults() + os.Exit(2) +} func flagApply() string { - flag.Parse() printer.Version() + + target := "" + if len(os.Args) < 2 { + printArgHelp() + } + if !strings.HasPrefix(os.Args[1], "-") { + target = os.Args[1] + fSet.Parse(os.Args[2:]) + } else { + fSet.Parse(os.Args[1:]) + target = fSet.Arg(0) + } if *ver { os.Exit(0) } - ipArg := flag.Args() - if flag.NArg() != 1 { - fmt.Println("Args Error\nUsage : nexttrace [-VTU] [-d DATAORIGIN.STR ] [ -m TTL ] [ -p PORT ] [ -q PROBES.COUNT ] [ -r PARALLELREQUESTS.COUNT ] [-rdns] [ -realtime | -table ] -report HOSTNAME") - os.Exit(2) + if target == "" { + printArgHelp() } - return ipArg[0] + return target } func main() {