Files
injoyai-tdx/hosts.go
2025-06-18 13:50:23 +08:00

120 lines
2.7 KiB
Go

package tdx
import (
"github.com/injoyai/base/types"
"github.com/injoyai/logs"
"net"
"strings"
"sync"
"time"
)
var (
// Hosts 所有服务器地址(2024-11-30测试通过)
Hosts = func() []string {
lenSH := len(SHHosts)
lenBJ := len(BJHosts)
lenGZ := len(GZHosts)
lenWH := len(WHHosts)
ls := make([]string, lenSH+lenBJ+lenGZ+lenWH)
copy(ls[:lenSH], SHHosts)
copy(ls[lenSH:lenSH+lenBJ], BJHosts)
copy(ls[lenSH+lenBJ:lenSH+lenBJ+lenGZ], GZHosts)
copy(ls[lenSH+lenBJ+lenGZ:lenSH+lenBJ+lenGZ+lenWH], WHHosts)
return ls
}()
// SHHosts 上海服务器地址
SHHosts = []string{
"124.71.187.122", //华为
"122.51.120.217", //腾讯
"111.229.247.189", //腾讯
"124.70.176.52", //华为
"123.60.186.45", //华为
"122.51.232.182", //腾讯
"118.25.98.114", //腾讯
"124.70.199.56", //华为
"121.36.225.169", //华为
"123.60.70.228", //华为
"123.60.73.44", //华为
"124.70.133.119", //华为
"124.71.187.72", //华为
"123.60.84.66", //华为
}
// BJHosts 北京服务器地址
BJHosts = []string{
"121.36.54.217", //华为
"121.36.81.195", //华为
"123.249.15.60", //华为
"124.70.75.113", //华为
"120.46.186.223", //华为
"124.70.22.210", //华为
"139.9.133.247", //华为
}
// GZHosts 广州服务器地址,客户端上可能显示深圳
GZHosts = []string{
"124.71.85.110", //华为
"139.9.51.18", //华为
"139.159.239.163", //华为
"124.71.9.153", //华为
"116.205.163.254", //华为
"116.205.171.132", //华为
"116.205.183.150", //华为
"111.230.186.52", //腾讯
"110.41.4.4", //华为
"110.41.2.72", //华为
"110.41.154.219", //华为
"110.41.147.114", //华为,这个客户端显示深圳线路1,IP查询是广州的
}
// WHHosts 武汉服务器地址
WHHosts = []string{
"119.97.185.59", //电信
}
)
// FastHosts 通过tcp(ping不可用)的方式筛选可用的地址,并排序(有点误差)
func FastHosts(hosts ...string) []DialResult {
wg := sync.WaitGroup{}
wg.Add(len(hosts))
mu := sync.Mutex{}
ls := types.List[DialResult](nil)
for _, host := range hosts {
go func(host string) {
defer wg.Done()
addr := host
if !strings.Contains(addr, ":") {
addr += ":7709"
}
now := time.Now()
c, err := net.Dial("tcp", addr)
if err != nil {
logs.Err(err)
return
}
spend := time.Since(now)
c.Close()
mu.Lock()
ls = append(ls, DialResult{
Host: host,
Spend: spend,
})
mu.Unlock()
}(host)
}
wg.Wait()
return ls.Sort(func(a, b DialResult) bool {
return a.Spend < b.Spend
})
}
// DialResult 连接结果
type DialResult struct {
Host string
Spend time.Duration
}