From f63ef9552ee1911ec5e52c8dc95e7d1e5012fd2b Mon Sep 17 00:00:00 2001 From: tsosunchia <59512455+tsosunchia@users.noreply.github.com> Date: Tue, 3 Oct 2023 01:57:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BF=87=E6=BB=A4=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ipgeo/ipfilter.go | 46 +++++++++++++++++++++++++++++++++++++++++++++ ipgeo/ipgeo_test.go | 7 +++++++ 2 files changed, 53 insertions(+) diff --git a/ipgeo/ipfilter.go b/ipgeo/ipfilter.go index d996ebe..abdff2d 100644 --- a/ipgeo/ipfilter.go +++ b/ipgeo/ipfilter.go @@ -78,6 +78,46 @@ func Filter(ip string) (*IPGeoData, bool) { asn = "" whois = "RFC1112" isFiltered = true + case cidrRangeContains("fe80::/10", ip): + asn = "" + whois = "RFC4291" + isFiltered = true + case cidrRangeContains("ff00::/8", ip): + asn = "" + whois = "RFC4291" + isFiltered = true + case cidrRangeContains("fec0::/10", ip): + asn = "" + whois = "RFC3879" + isFiltered = true + case cidrRangeContains("fe00::/9", ip): + asn = "" + whois = "RFC4291" + isFiltered = true + case cidrRangeContains("::ffff:0:0/96", ip): + asn = "" + whois = "RFC4291" + isFiltered = true + case cidrRangeContains("64:ff9b::/96", ip): + asn = "" + whois = "RFC6052" + isFiltered = true + case cidrRangeContains("0::/96", ip): + asn = "" + whois = "RFC4291" + isFiltered = true + case cidrRangeContains("64:ff9b:1::/48", ip): + asn = "" + whois = "RFC6052" + isFiltered = true + case cidrRangeContains("2001:db8::/32", ip): + asn = "" + whois = "RFC3849" + isFiltered = true + case cidrRangeContains("2002::/16", ip): + asn = "" + whois = "RFC3056" + isFiltered = true case net.ParseIP(ip).IsPrivate(): //rfc4193 if cidrRangeContains("fc00::/7", ip) { @@ -121,6 +161,12 @@ func Filter(ip string) (*IPGeoData, bool) { isFiltered = true default: } + // 判断是否为v6 且不在2000::/3 + if net.ParseIP(ip).To4() == nil && !cidrRangeContains("2000::/3", ip) { + asn = "" + whois = "INVALID" + isFiltered = true + } if !isFiltered { return nil, false } else { diff --git a/ipgeo/ipgeo_test.go b/ipgeo/ipgeo_test.go index c496c88..87999de 100644 --- a/ipgeo/ipgeo_test.go +++ b/ipgeo/ipgeo_test.go @@ -37,6 +37,13 @@ func TestXxx(t *testing.T) { log.Println(process_id, ttl_r) } +func TestFilter(t *testing.T) { + res, err := Filter("::1") + //打印whois信息 + fmt.Println(res.Whois) + print(err) +} + func reverseID(id string) (int64, int64, error) { ttl, _ := strconv.ParseInt(id[9:15], 2, 32) //process ID