mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2025-04-09 22:03:14 +08:00
feat: 支持CTG线路检测,优化系统适配性添加占位符
This commit is contained in:
parent
8d69825c32
commit
509f6a3dd6
11
README.md
11
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
|
||||
|
@ -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 ""
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
//go:build linux || freebsd || openbsd || darwin
|
||||
// +build linux freebsd openbsd darwin
|
||||
|
||||
package backtrace
|
||||
|
||||
import (
|
||||
|
@ -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
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
//go:build !linux && !freebsd && !openbsd && !darwin && !windows
|
||||
// +build !linux,!freebsd,!openbsd,!darwin,!windows
|
||||
|
||||
package backtrace
|
||||
|
||||
import (
|
Loading…
Reference in New Issue
Block a user