pingtunnel/country.go
2023-03-18 13:32:35 +08:00

53 lines
893 B
Go

package pingtunnel
import (
"errors"
"github.com/esrrhs/gohome/common"
"github.com/oschwald/geoip2-golang"
"net"
)
var gdb *geoip2.Reader
func LoadGeoDB(file string) error {
if len(file) <= 0 {
file = common.GetDataDir() + "/geoip/" + "GeoLite2-Country.mmdb"
}
db, err := geoip2.Open(file)
if err != nil {
return err
}
gdb = db
return nil
}
func GetCountryIsoCode(ipaddr string) (string, error) {
ip := net.ParseIP(ipaddr)
if ip == nil {
return "", errors.New("ip " + ipaddr + " ParseIP nil")
}
record, err := gdb.City(ip)
if err != nil {
return "", err
}
return record.Country.IsoCode, nil
}
func GetCountryName(ipaddr string) (string, error) {
ip := net.ParseIP(ipaddr)
if ip == nil {
return "", errors.New("ip " + ipaddr + "ParseIP nil")
}
record, err := gdb.City(ip)
if err != nil {
return "", err
}
return record.Country.Names["en"], nil
}