mirror of
				https://github.com/oneclickvirt/backtrace.git
				synced 2025-11-04 07:42:37 +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] 检测回程显示IPV4地址时的线路(使用1500字节的包),不显示IP地址时显示ASN检测不到
 | 
				
			||||||
- [x] 支持对```4837```、```9929```和```163```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)也支持
 | 
					- [x] 支持对```9929```、```4837```和```163```线路的判断
 | 
				
			||||||
- [x] 支持对```CN2GT```和```CN2GIA```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)不支持,原版全部识别为```CN2```了
 | 
					- [x] 支持对```CTGNET```、```CN2GIA```和```CN2GT```线路的判断
 | 
				
			||||||
- [x] 支持对```CMIN2```和```CMI```线路的判断,原版[backtrace](https://github.com/zhanghanyun/backtrace)也支持,但所支持的IP区间不一样,本项目更多
 | 
					- [x] 支持对```CMIN2```和```CMI```线路的判断
 | 
				
			||||||
- [x] 支持对整个回程路由进行线路分析,与原版[backtrace](https://github.com/zhanghanyun/backtrace)仅进行一次判断不同
 | 
					- [x] 支持对整个回程路由进行线路分析,一个目标IP可能会分析出多种线路
 | 
				
			||||||
- [x] 修复原版[backtrace](https://github.com/zhanghanyun/backtrace)对IPV4地址信息获取时json解析失败依然打印信息的问题,本项目忽略错误继续执行路由线路查询
 | 
					 | 
				
			||||||
- [x] 增加对全平台的编译支持,原版[backtrace](https://github.com/zhanghanyun/backtrace)仅支持linux平台的amd64和arm64架构
 | 
					- [x] 增加对全平台的编译支持,原版[backtrace](https://github.com/zhanghanyun/backtrace)仅支持linux平台的amd64和arm64架构
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## TODO
 | 
					## TODO
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,7 @@ var (
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	m = map[string]string{
 | 
						m = map[string]string{
 | 
				
			||||||
		// [] 前的字符串个数,中文占2个字符串
 | 
							// [] 前的字符串个数,中文占2个字符串
 | 
				
			||||||
 | 
							"AS23764": "电信CTGNET [精品线路]",
 | 
				
			||||||
		"AS4809a": "电信CN2GIA [精品线路]",
 | 
							"AS4809a": "电信CN2GIA [精品线路]",
 | 
				
			||||||
		"AS4809b": "电信CN2GT  [优质线路]",
 | 
							"AS4809b": "电信CN2GT  [优质线路]",
 | 
				
			||||||
		"AS4134":  "电信163    [普通线路]",
 | 
							"AS4134":  "电信163    [普通线路]",
 | 
				
			||||||
@ -109,6 +110,10 @@ func trace(ch chan Result, i int) {
 | 
				
			|||||||
				if !strings.Contains(tempText, asnDescription) {
 | 
									if !strings.Contains(tempText, asnDescription) {
 | 
				
			||||||
					tempText += DarkGreen(asnDescription) + " "
 | 
										tempText += DarkGreen(asnDescription) + " "
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
								case "AS23764":
 | 
				
			||||||
 | 
									if !strings.Contains(tempText, asnDescription) {
 | 
				
			||||||
 | 
										tempText += DarkGreen(asnDescription) + " "
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			case "AS4809b":
 | 
								case "AS4809b":
 | 
				
			||||||
				if !strings.Contains(tempText, asnDescription) {
 | 
									if !strings.Contains(tempText, asnDescription) {
 | 
				
			||||||
					tempText += Green(asnDescription) + " "
 | 
										tempText += Green(asnDescription) + " "
 | 
				
			||||||
@ -149,6 +154,8 @@ func ipAsn(ip string) string {
 | 
				
			|||||||
		return "AS58807"
 | 
							return "AS58807"
 | 
				
			||||||
	case strings.HasPrefix(ip, "223.118") || strings.HasPrefix(ip, "223.119") || strings.HasPrefix(ip, "223.120") || strings.HasPrefix(ip, "223.121"):
 | 
						case strings.HasPrefix(ip, "223.118") || strings.HasPrefix(ip, "223.119") || strings.HasPrefix(ip, "223.120") || strings.HasPrefix(ip, "223.121"):
 | 
				
			||||||
		return "AS58453"
 | 
							return "AS58453"
 | 
				
			||||||
 | 
						case strings.HasPrefix(ip, "69.194") || strings.HasPrefix(ip, "203.22"):
 | 
				
			||||||
 | 
							return "AS23764"
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return ""
 | 
							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
 | 
					package backtrace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					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
 | 
					package backtrace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user