@@ -3,14 +3,13 @@ package main
3
3
import (
4
4
"flag"
5
5
"fmt"
6
+ "github.com/xgadget-lab/nexttrace/ipgeo"
7
+ "github.com/xgadget-lab/nexttrace/printer"
8
+ "github.com/xgadget-lab/nexttrace/trace"
9
+ "github.com/xgadget-lab/nexttrace/util"
10
+ "log"
6
11
"os"
7
12
"time"
8
-
9
- "github.com/xgadget-lab/nexttrace/methods"
10
- "github.com/xgadget-lab/nexttrace/methods/tcp"
11
- "github.com/xgadget-lab/nexttrace/methods/udp"
12
- "github.com/xgadget-lab/nexttrace/util"
13
- "github.com/xgadget-lab/nexttrace/util/printer"
14
13
)
15
14
16
15
var tcpSYNFlag = flag .Bool ("T" , false , "Use TCP SYN for tracerouting (default port is 80 in TCP, 53 in UDP)" )
@@ -22,67 +21,58 @@ var dataOrigin = flag.String("d", "LeoMoeAPI", "Choose IP Geograph Data Provider
22
21
var displayMode = flag .String ("displayMode" , "table" , "Choose The Display Mode [table, classic]" )
23
22
var rdnsenable = flag .Bool ("rdns" , false , "Set whether rDNS will be display" )
24
23
24
+ func flagApply () string {
25
+ flag .Parse ()
26
+ ipArg := flag .Args ()
27
+ if flag .NArg () != 1 {
28
+ fmt .Println ("Args Error\n Usage : ./nexttrace [-T] [-rdns] [-displayMode <displayMode>] [-d <dataOrigin> ] [ -m <hops> ] [ -p <port> ] [ -q <probes> ] [ -r <parallelrequests> ] <hostname>" )
29
+ os .Exit (2 )
30
+ }
31
+ return ipArg [0 ]
32
+ }
33
+
25
34
func main () {
26
- printer .PrintCopyRight ()
35
+ if os .Getuid () != 0 {
36
+ log .Fatalln ("Traceroute requires root/sudo privileges." )
37
+ }
38
+
27
39
domain := flagApply ()
28
40
ip := util .DomainLookUp (domain )
29
41
printer .PrintTraceRouteNav (ip , domain , * dataOrigin )
30
42
43
+ var m trace.Method = ""
31
44
if * tcpSYNFlag {
32
- tcpTraceroute := tcp .New (ip , methods.TracerouteConfig {
33
- MaxHops : uint16 (* maxHops ),
34
- NumMeasurements : uint16 (* numMeasurements ),
35
- ParallelRequests : uint16 (* parallelRequests ),
36
- Port : * port ,
37
- Timeout : time .Second / 2 ,
38
- })
39
- res , err := tcpTraceroute .Start ()
45
+ m = trace .TCPTrace
46
+ } else {
47
+ m = trace .UDPTrace
48
+ }
40
49
41
- if err != nil {
42
- fmt .Println ("请赋予 sudo (root) 权限运行本程序" )
43
- } else {
44
- util .Printer (& util.PrinterConfig {
45
- IP : ip ,
46
- DisplayMode : * displayMode ,
47
- DataOrigin : * dataOrigin ,
48
- Rdnsenable : * rdnsenable ,
49
- Results : * res ,
50
- })
51
- }
50
+ if ! * tcpSYNFlag && * port == 80 {
51
+ * port = 53
52
+ }
52
53
53
- } else {
54
- if * port == 80 {
55
- * port = 53
56
- }
57
- udpTraceroute := udp .New (ip , true , methods.TracerouteConfig {
58
- MaxHops : uint16 (* maxHops ),
59
- NumMeasurements : uint16 (* numMeasurements ),
60
- ParallelRequests : uint16 (* parallelRequests ),
61
- Port : * port ,
62
- Timeout : 2 * time .Second ,
63
- })
64
- res , err := udpTraceroute .Start ()
54
+ var conf = trace.Config {
55
+ DestIP : ip ,
56
+ DestPort : * port ,
57
+ MaxHops : * maxHops ,
58
+ NumMeasurements : * numMeasurements ,
59
+ ParallelRequests : * parallelRequests ,
60
+ RDns : * rdnsenable ,
61
+ IPGeoSource : ipgeo .GetSource (* dataOrigin ),
62
+ Timeout : 2 * time .Second ,
65
63
66
- if err != nil {
67
- fmt .Println ("请赋予 sudo (root) 权限运行本程序" )
68
- } else {
69
- util .Printer (& util.PrinterConfig {
70
- IP : ip ,
71
- DisplayMode : * displayMode ,
72
- DataOrigin : * dataOrigin ,
73
- Rdnsenable : * rdnsenable ,
74
- Results : * res ,
75
- })
76
- }
64
+ //Quic: false,
77
65
}
78
- }
79
66
80
- func flagApply () string {
81
- flag .Parse ()
82
- ipArg := flag .Args ()
83
- if flag .NArg () != 1 {
84
- fmt .Println ("Args Error\n Usage : ./nexttrace [-T] [-rdns] [-displayMode <displayMode>] [-d <dataOrigin> ] [ -m <hops> ] [ -p <port> ] [ -q <probes> ] [ -r <parallelrequests> ] <hostname>" )
85
- os .Exit (2 )
67
+ res , err := trace .Traceroute (m , conf )
68
+
69
+ if err != nil {
70
+ log .Fatalln (err )
71
+ }
72
+
73
+ if * displayMode == "table" {
74
+ printer .TracerouteTablePrinter (res )
75
+ } else {
76
+ printer .TraceroutePrinter (res )
86
77
}
87
- return ipArg [0 ]
88
78
}
0 commit comments