mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-03 06:07:20 +02:00

- Added support for loading geoip db from external file - Added -update_geoip flag for automatically update the geoip
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package geodb
|
|
|
|
import (
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"imuslab.com/zoraxy/mod/utils"
|
|
)
|
|
|
|
const (
|
|
ipv4UpdateSource = "https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv4.csv"
|
|
ipv6UpdateSource = "https://cdn.jsdelivr.net/npm/@ip-location-db/geo-whois-asn-country/geo-whois-asn-country-ipv6.csv"
|
|
)
|
|
|
|
// DownloadGeoDBUpdate download the latest geodb update
|
|
func DownloadGeoDBUpdate(externalGeoDBStoragePath string) {
|
|
//Create the storage path if not exist
|
|
if !utils.FileExists(externalGeoDBStoragePath) {
|
|
os.MkdirAll(externalGeoDBStoragePath, 0755)
|
|
}
|
|
|
|
//Download the update
|
|
log.Println("Downloading IPv4 database update...")
|
|
err := downloadFile(ipv4UpdateSource, externalGeoDBStoragePath+"/geoipv4.csv")
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
log.Println("Downloading IPv6 database update...")
|
|
err = downloadFile(ipv6UpdateSource, externalGeoDBStoragePath+"/geoipv6.csv")
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
log.Println("GeoDB update stored at: " + externalGeoDBStoragePath)
|
|
log.Println("Exiting...")
|
|
}
|
|
|
|
// Utility functions
|
|
func downloadFile(url string, savepath string) error {
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
fileContent, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(savepath, fileContent, 0644)
|
|
}
|