mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-09 02:41:22 +08:00
chore: Increase support for other format of ASN
This commit is contained in:
parent
3e966e82c7
commit
a86c562852
@ -5,6 +5,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/metacubex/mihomo/log"
|
||||||
"github.com/oschwald/maxminddb-golang"
|
"github.com/oschwald/maxminddb-golang"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,11 +24,16 @@ type ASNReader struct {
|
|||||||
*maxminddb.Reader
|
*maxminddb.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
type ASNResult struct {
|
type GeoLite2 struct {
|
||||||
AutonomousSystemNumber uint32 `maxminddb:"autonomous_system_number"`
|
AutonomousSystemNumber uint32 `maxminddb:"autonomous_system_number"`
|
||||||
AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
|
AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type IPInfo struct {
|
||||||
|
ASN string `maxminddb:"asn"`
|
||||||
|
Name string `maxminddb:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
func (r IPReader) LookupCode(ipAddress net.IP) []string {
|
func (r IPReader) LookupCode(ipAddress net.IP) []string {
|
||||||
switch r.databaseType {
|
switch r.databaseType {
|
||||||
case typeMaxmind:
|
case typeMaxmind:
|
||||||
@ -66,8 +72,18 @@ func (r IPReader) LookupCode(ipAddress net.IP) []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r ASNReader) LookupASN(ip net.IP) ASNResult {
|
func (r ASNReader) LookupASN(ip net.IP) (string, string) {
|
||||||
var result ASNResult
|
switch r.Metadata.DatabaseType {
|
||||||
r.Lookup(ip, &result)
|
case "GeoLite2-ASN", "DBIP-ASN-Lite (compat=GeoLite2-ASN)":
|
||||||
return result
|
var result GeoLite2
|
||||||
|
_ = r.Lookup(ip, &result)
|
||||||
|
return fmt.Sprint(result.AutonomousSystemNumber), result.AutonomousSystemOrganization
|
||||||
|
case "ipinfo generic_asn_free.mmdb":
|
||||||
|
var result IPInfo
|
||||||
|
_ = r.Lookup(ip, &result)
|
||||||
|
return result.ASN[2:], result.Name
|
||||||
|
default:
|
||||||
|
log.Warnln("Unsupported ASN type: %s", r.Metadata.DatabaseType)
|
||||||
|
}
|
||||||
|
return "", ""
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/metacubex/mihomo/component/geodata"
|
"github.com/metacubex/mihomo/component/geodata"
|
||||||
"github.com/metacubex/mihomo/component/mmdb"
|
"github.com/metacubex/mihomo/component/mmdb"
|
||||||
C "github.com/metacubex/mihomo/constant"
|
C "github.com/metacubex/mihomo/constant"
|
||||||
@ -26,17 +24,14 @@ func (a *ASN) Match(metadata *C.Metadata) (bool, string) {
|
|||||||
return false, ""
|
return false, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
result := mmdb.ASNInstance().LookupASN(ip.AsSlice())
|
asn, aso := mmdb.ASNInstance().LookupASN(ip.AsSlice())
|
||||||
asnNumber := strconv.FormatUint(uint64(result.AutonomousSystemNumber), 10)
|
|
||||||
ipASN := asnNumber + " " + result.AutonomousSystemOrganization
|
|
||||||
if a.isSourceIP {
|
if a.isSourceIP {
|
||||||
metadata.SrcIPASN = ipASN
|
metadata.SrcIPASN = asn + " " + aso
|
||||||
} else {
|
} else {
|
||||||
metadata.DstIPASN = ipASN
|
metadata.DstIPASN = asn + " " + aso
|
||||||
}
|
}
|
||||||
|
|
||||||
match := a.asn == asnNumber
|
return a.asn == asn, a.adapter
|
||||||
return match, a.adapter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ASN) RuleType() C.RuleType {
|
func (a *ASN) RuleType() C.RuleType {
|
||||||
|
Loading…
Reference in New Issue
Block a user