mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-02-26 16:57:08 +00:00
fix: geoip wrong matching logic in fallback-filter
https://github.com/MetaCubeX/mihomo/issues/1478
This commit is contained in:
@@ -22,7 +22,6 @@ type GEOIP struct {
|
||||
adapter string
|
||||
noResolveIP bool
|
||||
isSourceIP bool
|
||||
geodata bool
|
||||
}
|
||||
|
||||
var _ C.Rule = (*GEOIP)(nil)
|
||||
@@ -115,6 +114,36 @@ func (g *GEOIP) MatchIp(ip netip.Addr) bool {
|
||||
return slices.Contains(codes, g.country)
|
||||
}
|
||||
|
||||
// MatchIp implements C.IpMatcher
|
||||
func (g dnsFallbackFilter) MatchIp(ip netip.Addr) bool {
|
||||
if !ip.IsValid() {
|
||||
return false
|
||||
}
|
||||
|
||||
if g.isLan(ip) { // compatible with original behavior
|
||||
return false
|
||||
}
|
||||
|
||||
if C.GeodataMode {
|
||||
matcher, err := g.getIPMatcher()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return !matcher.Match(ip)
|
||||
}
|
||||
|
||||
codes := mmdb.IPInstance().LookupCode(ip.AsSlice())
|
||||
return !slices.Contains(codes, g.country)
|
||||
}
|
||||
|
||||
type dnsFallbackFilter struct {
|
||||
*GEOIP
|
||||
}
|
||||
|
||||
func (g *GEOIP) DnsFallbackFilter() C.IpMatcher { // for dns.fallback-filter.geoip
|
||||
return dnsFallbackFilter{GEOIP: g}
|
||||
}
|
||||
|
||||
func (g *GEOIP) isLan(ip netip.Addr) bool {
|
||||
return ip.IsPrivate() ||
|
||||
ip.IsUnspecified() ||
|
||||
|
||||
Reference in New Issue
Block a user