mirror of
https://github.com/nxtrace/NTrace-core.git
synced 2025-08-12 06:26:39 +00:00
165 lines
4.9 KiB
Go
165 lines
4.9 KiB
Go
package fastTrace
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/nxtrace/NTrace-core/ipgeo"
|
||
"github.com/nxtrace/NTrace-core/printer"
|
||
"github.com/nxtrace/NTrace-core/trace"
|
||
"github.com/nxtrace/NTrace-core/tracelog"
|
||
"github.com/nxtrace/NTrace-core/util"
|
||
"github.com/nxtrace/NTrace-core/wshandle"
|
||
"log"
|
||
"os"
|
||
"os/signal"
|
||
)
|
||
|
||
//var pFastTracer ParamsFastTrace
|
||
|
||
func (f *FastTracer) tracert_v6(location string, ispCollection ISPCollection) {
|
||
fmt.Printf("%s『%s %s 』%s\n", printer.YELLOW_PREFIX, location, ispCollection.ISPName, printer.RESET_PREFIX)
|
||
fmt.Printf("traceroute to %s, %d hops max, %d byte packets\n", ispCollection.IPv6, f.ParamsFastTrace.MaxHops, f.ParamsFastTrace.PktSize)
|
||
|
||
ip, err := util.DomainLookUp(ispCollection.IPv6, "6", "", true)
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
var conf = trace.Config{
|
||
BeginHop: f.ParamsFastTrace.BeginHop,
|
||
DestIP: ip,
|
||
DestPort: 80,
|
||
MaxHops: f.ParamsFastTrace.MaxHops,
|
||
NumMeasurements: 3,
|
||
ParallelRequests: 18,
|
||
RDns: f.ParamsFastTrace.RDns,
|
||
AlwaysWaitRDNS: f.ParamsFastTrace.AlwaysWaitRDNS,
|
||
PacketInterval: 100,
|
||
TTLInterval: 500,
|
||
IPGeoSource: ipgeo.GetSource("LeoMoeAPI"),
|
||
Timeout: f.ParamsFastTrace.Timeout,
|
||
SrcAddr: f.ParamsFastTrace.SrcAddr,
|
||
PktSize: f.ParamsFastTrace.PktSize,
|
||
Lang: f.ParamsFastTrace.Lang,
|
||
}
|
||
|
||
if oe {
|
||
fp, err := os.OpenFile("/tmp/trace.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModePerm)
|
||
if err != nil {
|
||
return
|
||
}
|
||
defer func(fp *os.File) {
|
||
err := fp.Close()
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
}(fp)
|
||
log.SetOutput(fp)
|
||
log.SetFlags(0)
|
||
log.Printf("『%s %s 』\n", location, ispCollection.ISPName)
|
||
log.Printf("traceroute to %s, %d hops max, %d byte packets\n", ispCollection.IPv6, f.ParamsFastTrace.MaxHops, f.ParamsFastTrace.PktSize)
|
||
conf.RealtimePrinter = tracelog.RealtimePrinter
|
||
} else {
|
||
conf.RealtimePrinter = printer.RealtimePrinter
|
||
}
|
||
|
||
_, err = trace.Traceroute(f.TracerouteMethod, conf)
|
||
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
|
||
fmt.Println()
|
||
}
|
||
|
||
func (f *FastTracer) testAll_v6() {
|
||
f.testCT_v6()
|
||
println()
|
||
f.testCU_v6()
|
||
println()
|
||
f.testCM_v6()
|
||
println()
|
||
f.testEDU_v6()
|
||
}
|
||
|
||
func (f *FastTracer) testCT_v6() {
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CT163)
|
||
f.tracert_v6(TestIPsCollection.Shanghai.Location, TestIPsCollection.Shanghai.CT163)
|
||
f.tracert_v6(TestIPsCollection.Hangzhou.Location, TestIPsCollection.Hangzhou.CT163)
|
||
f.tracert_v6(TestIPsCollection.Guangzhou.Location, TestIPsCollection.Guangzhou.CT163)
|
||
}
|
||
|
||
func (f *FastTracer) testCU_v6() {
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CU169)
|
||
f.tracert_v6(TestIPsCollection.Shanghai.Location, TestIPsCollection.Shanghai.CU169)
|
||
f.tracert_v6(TestIPsCollection.Shanghai.Location, TestIPsCollection.Shanghai.CU9929)
|
||
f.tracert_v6(TestIPsCollection.Guangzhou.Location, TestIPsCollection.Guangzhou.CU169)
|
||
}
|
||
|
||
func (f *FastTracer) testCM_v6() {
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CM)
|
||
f.tracert_v6(TestIPsCollection.Shanghai.Location, TestIPsCollection.Shanghai.CM)
|
||
f.tracert_v6(TestIPsCollection.Hangzhou.Location, TestIPsCollection.Hangzhou.CM)
|
||
f.tracert_v6(TestIPsCollection.Guangzhou.Location, TestIPsCollection.Guangzhou.CM)
|
||
}
|
||
|
||
func (f *FastTracer) testEDU_v6() {
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.EDU)
|
||
f.tracert_v6(TestIPsCollection.Shanghai.Location, TestIPsCollection.Shanghai.EDU)
|
||
f.tracert_v6(TestIPsCollection.Hangzhou.Location, TestIPsCollection.Hangzhou.EDU)
|
||
}
|
||
|
||
func (f *FastTracer) testFast_v6() {
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CT163)
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CU169)
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.CM)
|
||
f.tracert_v6(TestIPsCollection.Beijing.Location, TestIPsCollection.Beijing.EDU)
|
||
}
|
||
|
||
func FastTestv6(tm bool, outEnable bool, paramsFastTrace ParamsFastTrace) {
|
||
var c string
|
||
|
||
oe = outEnable
|
||
|
||
fmt.Println("您想测试哪些ISP的路由?\n1. 国内四网\n2. 电信\n3. 联通\n4. 移动\n5. 教育网\n6. 全部")
|
||
fmt.Print("请选择选项:")
|
||
_, err := fmt.Scanln(&c)
|
||
if err != nil {
|
||
c = "1"
|
||
}
|
||
|
||
ft := FastTracer{
|
||
ParamsFastTrace: paramsFastTrace,
|
||
}
|
||
|
||
// 建立 WebSocket 连接
|
||
w := wshandle.New()
|
||
w.Interrupt = make(chan os.Signal, 1)
|
||
signal.Notify(w.Interrupt, os.Interrupt)
|
||
defer func() {
|
||
w.Conn.Close()
|
||
}()
|
||
|
||
if !tm {
|
||
ft.TracerouteMethod = trace.ICMPTrace
|
||
fmt.Println("您将默认使用ICMP协议进行路由跟踪,如果您想使用TCP SYN进行路由跟踪,可以加入 -T 参数")
|
||
} else {
|
||
ft.TracerouteMethod = trace.TCPTrace
|
||
}
|
||
|
||
switch c {
|
||
case "1":
|
||
ft.testFast_v6()
|
||
case "2":
|
||
ft.testCT_v6()
|
||
case "3":
|
||
ft.testCU_v6()
|
||
case "4":
|
||
ft.testCM_v6()
|
||
case "5":
|
||
ft.testEDU_v6()
|
||
case "6":
|
||
ft.testAll_v6()
|
||
default:
|
||
ft.testFast_v6()
|
||
}
|
||
}
|