feat: 支持CTG线路检测,优化系统适配性添加占位符

This commit is contained in:
spiritlhl 2025-04-05 02:52:00 +00:00
parent 8d69825c32
commit 509f6a3dd6
6 changed files with 18 additions and 112 deletions

View File

@ -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

View File

@ -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 ""
}

View File

@ -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
}
}

View File

@ -1,3 +1,6 @@
//go:build linux || freebsd || openbsd || darwin
// +build linux freebsd openbsd darwin
package backtrace
import (

View File

@ -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
}
}

View File

@ -1,3 +1,6 @@
//go:build !linux && !freebsd && !openbsd && !darwin && !windows
// +build !linux,!freebsd,!openbsd,!darwin,!windows
package backtrace
import (