Files
NTrace-core/ipgeo/ipinfoLocal.go
2023-10-06 21:03:38 +08:00

54 lines
1.2 KiB
Go

package ipgeo
import (
"errors"
"github.com/oschwald/maxminddb-golang"
"net"
"os"
"strings"
"time"
)
const (
ipinfoDataBasePath = "./ipinfoLocal.mmdb"
)
func IPInfoLocal(ip string, _ time.Duration, _ string, _ bool) (*IPGeoData, error) {
if _, err := os.Stat(ipinfoDataBasePath); os.IsNotExist(err) {
panic("Cannot find ipinfoLocal.mmdb")
}
region, err := maxminddb.Open(ipinfoDataBasePath)
if err != nil {
panic("Cannot find ipinfoLocal.mmdb")
}
defer func(region *maxminddb.Reader) {
err := region.Close()
if err != nil {
panic(err)
}
}(region)
var record interface{}
searchErr := region.Lookup(net.ParseIP(ip), &record)
if searchErr != nil {
return &IPGeoData{}, errors.New("no results")
}
recordMap := record.(map[string]interface{})
country_name := recordMap["country_name"].(string)
prov := ""
if recordMap["country"].(string) == "HK" {
country_name = "China"
prov = "Hong Kong"
}
if recordMap["country"].(string) == "TW" {
country_name = "China"
prov = "Taiwan"
}
return &IPGeoData{
Asnumber: strings.TrimPrefix(recordMap["asn"].(string), "AS"),
Country: country_name,
City: "",
Prov: prov,
Owner: recordMap["as_name"].(string),
}, nil
}