From 509f6a3dd6a545b4d179843bf19ce8aa3eea084f Mon Sep 17 00:00:00 2001 From: spiritlhl <103393591+spiritLHLS@users.noreply.github.com> Date: Sat, 5 Apr 2025 02:52:00 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81CTG=E7=BA=BF=E8=B7=AF?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=EF=BC=8C=E4=BC=98=E5=8C=96=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=80=A7=E6=B7=BB=E5=8A=A0=E5=8D=A0=E4=BD=8D?= =?UTF-8?q?=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++--- bk/asn.go | 7 +++ bk/listen_freebsd.go | 53 ---------------------- bk/listen_linux.go | 3 ++ bk/listen_openbsd.go | 53 ---------------------- bk/{listen_darwin.go => listen_unknown.go} | 3 ++ 6 files changed, 18 insertions(+), 112 deletions(-) delete mode 100644 bk/listen_freebsd.go delete mode 100644 bk/listen_openbsd.go rename bk/{listen_darwin.go => listen_unknown.go} (90%) diff --git a/README.md b/README.md index 9f85da9..b16c94a 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,11 @@ ## 功能 -- [x] 检测回程显示IPV4地址时的线路(使用1500字节的包),不显示IP地址时显示ASN检测不到,原版[backtrace](https://github.com/zhanghanyun/backtrace)也支持 -- [x] 支持对```4837```、```9929```和```163```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)也支持 -- [x] 支持对```CN2GT```和```CN2GIA```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)不支持,原版全部识别为```CN2```了 -- [x] 支持对```CMIN2```和```CMI```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)也支持,但所支持的IP区间不一样,本项目更多 -- [x] 支持对整个回程路由进行线路分析,与原版[backtrace](https://github.com/zhanghanyun/backtrace)仅进行一次判断不同 -- [x] 修复原版[backtrace](https://github.com/zhanghanyun/backtrace)对IPV4地址信息获取时json解析失败依然打印信息的问题,本项目忽略错误继续执行路由线路查询 +- [x] 检测回程显示IPV4地址时的线路(使用1500字节的包),不显示IP地址时显示ASN检测不到 +- [x] 支持对```9929```、```4837```和```163```线路的判断 +- [x] 支持对```CTGNET```、```CN2GIA```和```CN2GT```线路的判断 +- [x] 支持对```CMIN2```和```CMI```线路的判断 +- [x] 支持对整个回程路由进行线路分析,一个目标IP可能会分析出多种线路 - [x] 增加对全平台的编译支持,原版[backtrace](https://github.com/zhanghanyun/backtrace)仅支持linux平台的amd64和arm64架构 ## TODO diff --git a/bk/asn.go b/bk/asn.go index 5d47045..6677001 100644 --- a/bk/asn.go +++ b/bk/asn.go @@ -29,6 +29,7 @@ var ( } m = map[string]string{ // [] 前的字符串个数,中文占2个字符串 + "AS23764": "电信CTGNET [精品线路]", "AS4809a": "电信CN2GIA [精品线路]", "AS4809b": "电信CN2GT [优质线路]", "AS4134": "电信163 [普通线路]", @@ -109,6 +110,10 @@ func trace(ch chan Result, i int) { if !strings.Contains(tempText, asnDescription) { tempText += DarkGreen(asnDescription) + " " } + case "AS23764": + if !strings.Contains(tempText, asnDescription) { + tempText += DarkGreen(asnDescription) + " " + } case "AS4809b": if !strings.Contains(tempText, asnDescription) { tempText += Green(asnDescription) + " " @@ -149,6 +154,8 @@ func ipAsn(ip string) string { return "AS58807" case strings.HasPrefix(ip, "223.118") || strings.HasPrefix(ip, "223.119") || strings.HasPrefix(ip, "223.120") || strings.HasPrefix(ip, "223.121"): return "AS58453" + case strings.HasPrefix(ip, "69.194") || strings.HasPrefix(ip, "203.22"): + return "AS23764" default: return "" } diff --git a/bk/listen_freebsd.go b/bk/listen_freebsd.go deleted file mode 100644 index df868f2..0000000 --- a/bk/listen_freebsd.go +++ /dev/null @@ -1,53 +0,0 @@ -package backtrace - -import ( - "net" - "syscall" - - . "github.com/oneclickvirt/defaultset" -) - -func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - if EnableLoger { - InitLogger() - defer Logger.Sync() - conn, err := net.ListenIP(network, laddr) - if err != nil { - Logger.Info(err.Error()) - return nil, err - } - raw, err := conn.SyscallConn() - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - return conn, nil - } else { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err - } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil - } -} diff --git a/bk/listen_linux.go b/bk/listen_linux.go index df868f2..184dd44 100644 --- a/bk/listen_linux.go +++ b/bk/listen_linux.go @@ -1,3 +1,6 @@ +//go:build linux || freebsd || openbsd || darwin +// +build linux freebsd openbsd darwin + package backtrace import ( diff --git a/bk/listen_openbsd.go b/bk/listen_openbsd.go deleted file mode 100644 index df868f2..0000000 --- a/bk/listen_openbsd.go +++ /dev/null @@ -1,53 +0,0 @@ -package backtrace - -import ( - "net" - "syscall" - - . "github.com/oneclickvirt/defaultset" -) - -func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - if EnableLoger { - InitLogger() - defer Logger.Sync() - conn, err := net.ListenIP(network, laddr) - if err != nil { - Logger.Info(err.Error()) - return nil, err - } - raw, err := conn.SyscallConn() - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - return conn, nil - } else { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err - } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil - } -} diff --git a/bk/listen_darwin.go b/bk/listen_unknown.go similarity index 90% rename from bk/listen_darwin.go rename to bk/listen_unknown.go index df868f2..d8dc1a8 100644 --- a/bk/listen_darwin.go +++ b/bk/listen_unknown.go @@ -1,3 +1,6 @@ +//go:build !linux && !freebsd && !openbsd && !darwin && !windows +// +build !linux,!freebsd,!openbsd,!darwin,!windows + package backtrace import (