lookup ip and country when parse proxy

This commit is contained in:
zu1k
2020-09-07 12:59:45 +08:00
parent d84f2791a3
commit f2d9137488
5 changed files with 36 additions and 47 deletions

View File

@@ -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!")
// 全节点存储到数据库

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}