diff --git a/internal/iplibrary/library_ip2region.go b/internal/iplibrary/library_ip2region.go index a0c6918b..8dc9deb9 100644 --- a/internal/iplibrary/library_ip2region.go +++ b/internal/iplibrary/library_ip2region.go @@ -5,6 +5,7 @@ import ( "github.com/TeaOSLab/EdgeAPI/internal/errors" "github.com/TeaOSLab/EdgeAPI/internal/remotelogs" "github.com/lionsoul2014/ip2region/binding/golang/ip2region" + "net" "strings" ) @@ -27,10 +28,13 @@ func (this *IP2RegionLibrary) Lookup(ip string) (*Result, error) { return nil, errors.New("library has not been loaded") } - // 暂不支持IPv6 + // 只支持IPv4 if strings.Contains(ip, ":") { return nil, nil } + if net.ParseIP(ip) == nil { + return nil, nil + } defer func() { // 防止panic发生 diff --git a/internal/iplibrary/library_ip2region_test.go b/internal/iplibrary/library_ip2region_test.go index fef27ef6..81df4e50 100644 --- a/internal/iplibrary/library_ip2region_test.go +++ b/internal/iplibrary/library_ip2region_test.go @@ -24,6 +24,29 @@ func TestIP2RegionLibrary_Lookup(t *testing.T) { logs.PrintAsJSON(result, t) } +func TestIP2RegionLibrary_Lookup_Valid_IP(t *testing.T) { + library := &IP2RegionLibrary{} + err := library.Load(Tea.Root + "/resources/ipdata/ip2region/ip2region.db") + if err != nil { + t.Fatal(err) + } + { + result, err := library.Lookup("114.240.223") + if err != nil { + t.Fatal(err) + } + logs.PrintAsJSON(result, t) + } + { + result, err := library.Lookup("abc") + if err != nil { + t.Fatal(err) + } + logs.PrintAsJSON(result, t) + } +} + + func TestIP2RegionLibrary_Memory(t *testing.T) { library := &IP2RegionLibrary{} err := library.Load(Tea.Root + "/resources/ipdata/ip2region/ip2region.db")