mirror of
https://github.com/XTLS/RealiTLScanner.git
synced 2026-09-22 22:28:08 +03:00
42 lines
687 B
Go
42 lines
687 B
Go
package main
|
|
|
|
import (
|
|
"github.com/oschwald/geoip2-golang"
|
|
"log/slog"
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
type Geo struct {
|
|
geoReader *geoip2.Reader
|
|
mu sync.Mutex
|
|
}
|
|
|
|
func NewGeo() *Geo {
|
|
geo := &Geo{
|
|
mu: sync.Mutex{},
|
|
}
|
|
reader, err := geoip2.Open("Country.mmdb")
|
|
if err != nil {
|
|
slog.Warn("Cannot open Country.mmdb", "err", err)
|
|
return geo
|
|
}
|
|
slog.Info("Enabled GeoIP")
|
|
geo.geoReader = reader
|
|
return geo
|
|
}
|
|
|
|
func (o *Geo) GetGeo(ip net.IP) string {
|
|
if o.geoReader == nil {
|
|
return "N/A"
|
|
}
|
|
o.mu.Lock()
|
|
defer o.mu.Unlock()
|
|
country, err := o.geoReader.Country(ip)
|
|
if err != nil {
|
|
slog.Debug("Error reading geo", "err", err)
|
|
return "N/A"
|
|
}
|
|
return country.Country.IsoCode
|
|
}
|