mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
120 lines
2.7 KiB
Go
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
|
|
}
|