1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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)
- }
|