update: 现在默认无需配置即可使用,对于高阶用户,可以使用-c生成属于自己的偏好

This commit is contained in:
sjlleo
2022-06-04 20:28:58 +08:00
parent ed2f89310f
commit 2b9d8176d4
2 changed files with 51 additions and 10 deletions

View File

@@ -1,9 +1,10 @@
package config
import (
"os"
"io/ioutil"
"fmt"
"io/ioutil"
"os"
"gopkg.in/yaml.v2"
)
@@ -36,18 +37,46 @@ func writeFile(content []byte) error {
}
}
if err = ioutil.WriteFile(path + "ntraceConfig.yml", []byte(content), 0644); err != nil{
if err = ioutil.WriteFile(path+"ntraceConfig.yml", []byte(content), 0644); err != nil {
return err
}
return nil
}
func AutoGenerate() (*tracerConfig, error) {
token := Token{
LeoMoeAPI: "NextTraceDemo",
IPInfo: "",
}
preference := Preference{
AlwaysRoutePath: false,
}
finalConfig := tracerConfig{
Token: token,
Preference: preference,
}
yamlData, err := yaml.Marshal(&finalConfig)
if err != nil {
return nil, err
}
if err = writeFile(yamlData); err != nil {
return nil, err
} else {
return &finalConfig, nil
}
}
func Generate() (*tracerConfig, error) {
var leotoken string
var iPInfoToken string
var routePathEnable string
fmt.Println("这是一个配置向导,我们会帮助您生成配置文件,它是一次性的,除非您主动要求重新生成,否则它将不会再出现")
fmt.Println("请输入您的LeoMoeAPI Token如果您没有请到 Telegram Bot @NextTraceBot 获取一个")
@@ -82,8 +111,8 @@ func Generate() (*tracerConfig, error) {
yamlData, err := yaml.Marshal(&finalConfig)
if err != nil {
return nil, err
}
return nil, err
}
if err = writeFile(yamlData); err != nil {
return nil, err

20
main.go
View File

@@ -20,11 +20,12 @@ 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", 80, "Set SYN Traceroute Port")
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 rdnsenable = fSet.Bool("rdns", false, "Set whether rDNS will be display")
var noRdns = fSet.Bool("n", false, "Do not try to map IP address to host")
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")
@@ -49,9 +50,19 @@ func flagApply() string {
fSet.Parse(os.Args[1:])
target = fSet.Arg(0)
}
if *ver {
os.Exit(0)
}
// Advanced Config
if *manualConfig {
if _, err := config.Generate(); err != nil {
log.Fatal(err)
}
os.Exit(0)
}
if target == "" {
printArgHelp()
}
@@ -66,10 +77,11 @@ func main() {
log.Fatalln("Traceroute requires root/sudo privileges.")
}
configData, err := config.Read();
configData, err := config.Read()
// Initialize Default Config
if err != nil {
if configData, err = config.Generate(); err != nil {
if configData, err = config.AutoGenerate(); err != nil {
log.Fatal(err)
}
}
@@ -100,7 +112,7 @@ func main() {
MaxHops: *maxHops,
NumMeasurements: *numMeasurements,
ParallelRequests: *parallelRequests,
RDns: *rdnsenable,
RDns: !*noRdns,
IPGeoSource: ipgeo.GetSource(*dataOrigin),
Timeout: 2 * time.Second,
}