diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c68a2b..86581b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -153,7 +153,7 @@ jobs: dist/${{ env.ASSET_NAME }} - name: Release if: startsWith(github.ref, 'refs/tags/v') - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: # 将下述可执行文件 release 上去 draft: true # Release草稿 files: | diff --git a/fast_trace/fast_trace.go b/fast_trace/fast_trace.go index 31d18c6..839bf4a 100644 --- a/fast_trace/fast_trace.go +++ b/fast_trace/fast_trace.go @@ -3,6 +3,7 @@ package fastTrace import ( "bufio" "fmt" + "github.com/fatih/color" "github.com/nxtrace/NTrace-core/ipgeo" "github.com/nxtrace/NTrace-core/printer" "github.com/nxtrace/NTrace-core/trace" @@ -44,7 +45,7 @@ type IpListElement struct { var oe = false func (f *FastTracer) tracert(location string, ispCollection ISPCollection) { - fmt.Printf("%s『%s %s 』%s\n", printer.YELLOW_PREFIX, location, ispCollection.ISPName, printer.RESET_PREFIX) + fmt.Fprintf(color.Output, "%s\n", color.New(color.FgYellow, color.Bold).Sprintf("『%s %s 』", location, ispCollection.ISPName)) fmt.Printf("traceroute to %s, %d hops max, %d byte packets\n", ispCollection.IP, f.ParamsFastTrace.MaxHops, f.ParamsFastTrace.PktSize) ip, err := util.DomainLookUp(ispCollection.IP, "4", "", true) @@ -274,8 +275,14 @@ func testFile(paramsFastTrace ParamsFastTrace, tm bool) { } for _, ip := range ipList { - fmt.Printf("%s『%s』%s\n", printer.YELLOW_PREFIX, ip.Desc, printer.RESET_PREFIX) - fmt.Printf("traceroute to %s, %d hops max, %d byte packets\n", ip.Ip, paramsFastTrace.MaxHops, paramsFastTrace.PktSize) + fmt.Fprintf(color.Output, "%s\n", + color.New(color.FgYellow, color.Bold).Sprint("『 "+ip.Desc+"』"), + ) + if util.EnableHidDstIP == "" { + fmt.Printf("traceroute to %s, %d hops max, %d bytes packets\n", ip.Ip, paramsFastTrace.MaxHops, paramsFastTrace.PktSize) + } else { + fmt.Printf("traceroute to %s, %d hops max, %d bytes packets\n", util.HideIPPart(ip.Ip), paramsFastTrace.MaxHops, paramsFastTrace.PktSize) + } var srcAddr string if ip.Version4 { if paramsFastTrace.SrcDev != "" { diff --git a/go.mod b/go.mod index 04fc198..472af07 100644 --- a/go.mod +++ b/go.mod @@ -7,10 +7,10 @@ require ( github.com/google/gopacket v1.1.19 github.com/oschwald/maxminddb-golang v1.12.0 github.com/spf13/viper v1.18.2 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 github.com/tsosunchia/powclient v0.1.4 - golang.org/x/net v0.21.0 + golang.org/x/net v0.22.0 golang.org/x/sync v0.6.0 ) @@ -45,6 +45,6 @@ require ( github.com/tidwall/gjson v1.17.1 github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect - golang.org/x/sys v0.17.0 // indirect + golang.org/x/sys v0.18.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ec113c2..47a2c68 100644 --- a/go.sum +++ b/go.sum @@ -67,8 +67,9 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= @@ -92,8 +93,8 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= @@ -101,8 +102,8 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/trace/icmp_ipv4.go b/trace/icmp_ipv4.go index 5434072..5b9065e 100644 --- a/trace/icmp_ipv4.go +++ b/trace/icmp_ipv4.go @@ -150,8 +150,9 @@ func (t *ICMPTracer) listenICMP() { } continue } + ttl := int(msg.Msg[36]) packet_id := strconv.FormatInt(int64(binary.BigEndian.Uint16(msg.Msg[32:34])), 2) - if process_id, ttl, err := reverseID(packet_id); err == nil { + if process_id, _, err := reverseID(packet_id); err == nil { if process_id == int64(os.Getpid()&0x7f) { dstip := net.IP(msg.Msg[24:28]) if dstip.Equal(t.DestIP) || dstip.Equal(net.IPv4zero) { @@ -266,15 +267,20 @@ func (t *ICMPTracer) send(ttl int) error { return nil } - id := gernerateID(ttl) + //id := gernerateID(ttl) + id := gernerateID(0) // log.Println("发送的", id) + data := []byte{byte(ttl)} + data = append(data, bytes.Repeat([]byte{1}, t.Config.PktSize-5)...) + data = append(data, 0x00, 0x00, 0x4f, 0xff) + icmpHeader := icmp.Message{ Type: ipv4.ICMPTypeEcho, Code: 0, Body: &icmp.Echo{ ID: id, //Data: []byte("HELLO-R-U-THERE"), - Data: append(bytes.Repeat([]byte{1}, t.Config.PktSize-4), 0x00, 0x00, 0x4f, 0xff), + Data: data, Seq: ttl, }, } diff --git a/trace/icmp_ipv6.go b/trace/icmp_ipv6.go index 7202788..ecb4a70 100644 --- a/trace/icmp_ipv6.go +++ b/trace/icmp_ipv6.go @@ -171,8 +171,9 @@ func (t *ICMPTracerv6) listenICMP() { } } + ttl := int(msg.Msg[56]) packet_id := strconv.FormatInt(int64(binary.BigEndian.Uint16(msg.Msg[52:54])), 2) - if process_id, ttl, err := reverseID(packet_id); err == nil { + if process_id, _, err := reverseID(packet_id); err == nil { if process_id == int64(os.Getpid()&0x7f) { dstip := net.IP(msg.Msg[32:48]) // 无效包本地环回包 @@ -260,14 +261,19 @@ func (t *ICMPTracerv6) send(ttl int) error { if t.final != -1 && ttl > t.final { return nil } - id := gernerateID(ttl) + //id := gernerateID(ttl) + id := gernerateID(0) + + data := []byte{byte(ttl)} + data = append(data, bytes.Repeat([]byte{1}, t.Config.PktSize-5)...) + data = append(data, 0x00, 0x00, 0x4f, 0xff) icmpHeader := icmp.Message{ Type: ipv6.ICMPTypeEchoRequest, Code: 0, Body: &icmp.Echo{ ID: id, //Data: []byte("HELLO-R-U-THERE"), - Data: append(bytes.Repeat([]byte{1}, t.Config.PktSize-4), 0x00, 0x00, 0x4f, 0xff), + Data: data, Seq: ttl, }, }