mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-06-20 06:58:38 +03:00
Feat: add reverse match for GeoIP
This commit is contained in:
@ -99,14 +99,16 @@ func ParaseIPList(ips []string) ([]*GeoIP, error) {
|
||||
for _, ip := range ips {
|
||||
if strings.HasPrefix(ip, "geoip:") {
|
||||
country := ip[6:]
|
||||
isReverseMatch := false
|
||||
geoipc, err := LoadGeoIP(strings.ToUpper(country))
|
||||
if err != nil {
|
||||
return nil, newError("failed to load GeoIP: ", country).Base(err)
|
||||
}
|
||||
|
||||
geoipList = append(geoipList, &GeoIP{
|
||||
CountryCode: strings.ToUpper(country),
|
||||
Cidr: geoipc,
|
||||
CountryCode: strings.ToUpper(country),
|
||||
Cidr: geoipc,
|
||||
ReverseMatch: isReverseMatch,
|
||||
})
|
||||
continue
|
||||
}
|
||||
@ -129,14 +131,24 @@ func ParaseIPList(ips []string) ([]*GeoIP, error) {
|
||||
|
||||
filename := kv[0]
|
||||
country := kv[1]
|
||||
if len(filename) == 0 || len(country) == 0 {
|
||||
return nil, newError("empty filename or empty country in rule")
|
||||
}
|
||||
|
||||
isReverseMatch := false
|
||||
if strings.HasPrefix(country, "!") {
|
||||
country = country[1:]
|
||||
isReverseMatch = true
|
||||
}
|
||||
geoipc, err := LoadIPFile(filename, strings.ToUpper(country))
|
||||
if err != nil {
|
||||
return nil, newError("failed to load IPs: ", country, " from ", filename).Base(err)
|
||||
}
|
||||
|
||||
geoipList = append(geoipList, &GeoIP{
|
||||
CountryCode: strings.ToUpper(filename + "_" + country),
|
||||
Cidr: geoipc,
|
||||
CountryCode: strings.ToUpper(filename + "_" + country),
|
||||
Cidr: geoipc,
|
||||
ReverseMatch: isReverseMatch,
|
||||
})
|
||||
|
||||
continue
|
||||
|
Reference in New Issue
Block a user