mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 13:10:24 +08:00 
			
		
		
		
	IP库增加多个辅助查询函数
This commit is contained in:
		@@ -53,6 +53,18 @@ func LookupIP(ip string) *QueryResult {
 | 
			
		||||
	return defaultLibrary.LookupIP(ip)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupIPSummaries 查询一组IP对应的区域描述
 | 
			
		||||
func LookupIPSummaries(ipList []string) map[string]string /** ip => summary **/ {
 | 
			
		||||
	var result = map[string]string{}
 | 
			
		||||
	for _, ip := range ipList {
 | 
			
		||||
		var region = LookupIP(ip)
 | 
			
		||||
		if region != nil && region.IsOk() {
 | 
			
		||||
			result[ip] = region.Summary()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type IPLibrary struct {
 | 
			
		||||
	reader *Reader
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -86,6 +86,41 @@ func TestIPLibrary_LookupIP(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestIPLibrary_LookupIP_Summary(t *testing.T) {
 | 
			
		||||
	var lib = iplibrary.NewIPLibrary()
 | 
			
		||||
	err := lib.InitFromData(iplibrary.DefaultIPLibraryData(), "")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, ip := range []string{
 | 
			
		||||
		"66.249.66.69",
 | 
			
		||||
		"123456", // wrong ip
 | 
			
		||||
		"",       // empty
 | 
			
		||||
	} {
 | 
			
		||||
		var result = lib.LookupIP(ip)
 | 
			
		||||
		if result.IsOk() {
 | 
			
		||||
			t.Log(ip, "=>", "region summary:", result.RegionSummary(), "summary:", result.Summary())
 | 
			
		||||
		} else {
 | 
			
		||||
			t.Log(ip, "=>", "region summary:", result.RegionSummary(), "summary:", result.Summary())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestIPLibrary_LookupIPSummaries(t *testing.T) {
 | 
			
		||||
	_ = iplibrary.InitDefault()
 | 
			
		||||
	t.Logf("%+v", iplibrary.LookupIPSummaries([]string{
 | 
			
		||||
		"127.0.0.1",
 | 
			
		||||
		"8.8.8.8",
 | 
			
		||||
		"4.4.4.4",
 | 
			
		||||
		"202.96.0.20",
 | 
			
		||||
		"111.197.165.199",
 | 
			
		||||
		"66.249.66.69",
 | 
			
		||||
		"2222",                           // wrong ip
 | 
			
		||||
		"2406:8c00:0:3401:133:18:168:70", // ipv6
 | 
			
		||||
	}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func BenchmarkIPLibrary_Lookup(b *testing.B) {
 | 
			
		||||
	var lib = iplibrary.NewIPLibrary()
 | 
			
		||||
	err := lib.InitFromData(iplibrary.DefaultIPLibraryData(), "")
 | 
			
		||||
 
 | 
			
		||||
@@ -183,6 +183,33 @@ func (this *QueryResult) Summary() string {
 | 
			
		||||
	return strings.Join(pieces, " ")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *QueryResult) RegionSummary() string {
 | 
			
		||||
	if this.item == nil {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var pieces = []string{}
 | 
			
		||||
	var countryName = this.CountryName()
 | 
			
		||||
	var provinceName = this.ProvinceName()
 | 
			
		||||
	var cityName = this.CityName()
 | 
			
		||||
	var townName = this.TownName()
 | 
			
		||||
 | 
			
		||||
	if len(countryName) > 0 {
 | 
			
		||||
		pieces = append(pieces, countryName)
 | 
			
		||||
	}
 | 
			
		||||
	if len(provinceName) > 0 && !lists.ContainsString(pieces, provinceName) {
 | 
			
		||||
		pieces = append(pieces, provinceName)
 | 
			
		||||
	}
 | 
			
		||||
	if len(cityName) > 0 && !lists.ContainsString(pieces, cityName) && !lists.ContainsString(pieces, strings.TrimSuffix(cityName, "市")) {
 | 
			
		||||
		pieces = append(pieces, cityName)
 | 
			
		||||
	}
 | 
			
		||||
	if len(townName) > 0 && !lists.ContainsString(pieces, townName) && !lists.ContainsString(pieces, strings.TrimSuffix(townName, "县")) {
 | 
			
		||||
		pieces = append(pieces, townName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return strings.Join(pieces, " ")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *QueryResult) realCountryId() uint16 {
 | 
			
		||||
	if this.item != nil {
 | 
			
		||||
		switch item := this.item.(type) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user