lookup ip and country when parse proxy
This commit is contained in:
@@ -40,7 +40,7 @@ func CrawlGo() {
|
||||
},
|
||||
}.CleanProxies()
|
||||
log.Println("CrawlGo cleaned node count:", len(proxies))
|
||||
proxies.NameAddCounrty().Sort().NameAddIndex().NameAddTG()
|
||||
proxies.NameSetCounrty().Sort().NameAddIndex().NameAddTG()
|
||||
log.Println("Proxy rename DONE!")
|
||||
|
||||
// 全节点存储到数据库
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"github.com/zu1k/proxypool/pkg/getter"
|
||||
"github.com/zu1k/proxypool/pkg/proxy"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -70,7 +69,7 @@ func GetAllProxies() (proxies proxy.ProxyList) {
|
||||
|
||||
for _, proxyDB := range proxiesDB {
|
||||
if proxiesDB != nil {
|
||||
proxies = append(proxies, getter.String2Proxy(proxyDB.Link))
|
||||
proxies = append(proxies, proxy.ParseProxyFromLink(proxyDB.Link))
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
@@ -2,7 +2,6 @@ package getter
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/zu1k/proxypool/pkg/proxy"
|
||||
@@ -30,28 +29,10 @@ func NewGetter(sourceType string, options tool.Options) (getter Getter, err erro
|
||||
return nil, ErrorCreaterNotSupported
|
||||
}
|
||||
|
||||
func String2Proxy(link string) proxy.Proxy {
|
||||
var err error
|
||||
var data proxy.Proxy
|
||||
if strings.HasPrefix(link, "ssr://") {
|
||||
data, err = proxy.ParseSSRLink(link)
|
||||
} else if strings.HasPrefix(link, "vmess://") {
|
||||
data, err = proxy.ParseVmessLink(link)
|
||||
} else if strings.HasPrefix(link, "ss://") {
|
||||
data, err = proxy.ParseSSLink(link)
|
||||
} else if strings.HasPrefix(link, "trojan://") {
|
||||
data, err = proxy.ParseTrojanLink(link)
|
||||
}
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
func StringArray2ProxyArray(origin []string) proxy.ProxyList {
|
||||
results := make(proxy.ProxyList, 0)
|
||||
for _, link := range origin {
|
||||
results = append(results, String2Proxy(link))
|
||||
results = append(results, proxy.ParseProxyFromLink(link))
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Base struct {
|
||||
Name string `yaml:"name" json:"name" gorm:"index"`
|
||||
Server string `yaml:"server" json:"server" gorm:"index"`
|
||||
@@ -56,3 +60,30 @@ type Proxy interface {
|
||||
SetUseable(useable bool)
|
||||
SetCountry(country string)
|
||||
}
|
||||
|
||||
func ParseProxyFromLink(link string) Proxy {
|
||||
var err error
|
||||
var data Proxy
|
||||
if strings.HasPrefix(link, "ssr://") {
|
||||
data, err = ParseSSRLink(link)
|
||||
} else if strings.HasPrefix(link, "vmess://") {
|
||||
data, err = ParseVmessLink(link)
|
||||
} else if strings.HasPrefix(link, "ss://") {
|
||||
data, err = ParseSSLink(link)
|
||||
} else if strings.HasPrefix(link, "trojan://") {
|
||||
data, err = ParseTrojanLink(link)
|
||||
}
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
ip, country, err := geoIp.Find(data.BaseInfo().Server)
|
||||
if err != nil {
|
||||
country = "🏁 ZZ"
|
||||
}
|
||||
data.SetCountry(country)
|
||||
// trojan依赖域名?
|
||||
if data.TypeName() != "trojan" {
|
||||
data.SetIP(ip)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type ProxyList []Proxy
|
||||
@@ -63,32 +62,11 @@ func (ps ProxyList) Sort() ProxyList {
|
||||
return ps
|
||||
}
|
||||
|
||||
func (ps ProxyList) NameAddCounrty() ProxyList {
|
||||
func (ps ProxyList) NameSetCounrty() ProxyList {
|
||||
num := len(ps)
|
||||
wg := &sync.WaitGroup{}
|
||||
wg.Add(num)
|
||||
for i := 0; i < num; i++ {
|
||||
ii := i
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
country := ps[ii].BaseInfo().Country
|
||||
if country == "" {
|
||||
ip, c, err := geoIp.Find(ps[ii].BaseInfo().Server)
|
||||
if err != nil {
|
||||
country = "🏁 ZZ"
|
||||
} else {
|
||||
country = c
|
||||
}
|
||||
ps[ii].SetCountry(country)
|
||||
// trojan依赖域名?
|
||||
if ps[ii].TypeName() != "trojan" {
|
||||
ps[ii].SetIP(ip)
|
||||
}
|
||||
}
|
||||
ps[ii].SetName(country)
|
||||
}()
|
||||
ps[i].SetName(ps[i].BaseInfo().Country)
|
||||
}
|
||||
wg.Wait()
|
||||
return ps
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user