2023-03-18 08:32:35 +03:00
|
|
|
package pingtunnel
|
2023-02-22 16:29:12 +03:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|