diff options
| author | loyalsoldier <[email protected]> | 2020-04-02 22:28:22 +0800 |
|---|---|---|
| committer | loyalsoldier <[email protected]> | 2020-04-03 09:40:40 +0800 |
| commit | d7766c01f52d4acacedc84d0e98e8bf983de3a60 (patch) | |
| tree | f5380688e44bb3d6081df519e58cae7e423a2ba7 | |
| parent | eef5a6b03763f99d4709f766e3c97af453ed93c7 (diff) | |
Change CN IPv4 CIDR using IPIP.net free IP list
| -rw-r--r-- | main.go | 64 |
1 files changed, 62 insertions, 2 deletions
@@ -6,10 +6,12 @@ package main import ( + "compress/gzip" "encoding/csv" "flag" "fmt" "io/ioutil" + "net/http" "os" "strings" @@ -23,6 +25,7 @@ var ( countryCodeFile = flag.String("country", "", "Path to the country code file") ipv4File = flag.String("ipv4", "", "Path to the IPv4 block file") ipv6File = flag.String("ipv6", "", "Path to the IPv6 block file") + cnIPv4CIDRURL = flag.String("cnipv4url", "", "URL of CN IPv4 CIDR file") ) func getCountryCodeMap() (map[string]string, error) { @@ -63,8 +66,8 @@ func getCidrPerCountry(file string, m map[string]string, list map[string][]*rout } for _, line := range lines[1:] { cidrStr := line[0] - countryId := line[1] - if countryCode, found := m[countryId]; found { + countryID := line[1] + if countryCode, found := m[countryID]; found { cidr, err := conf.ParseIP(cidrStr) if err != nil { return err @@ -76,6 +79,59 @@ func getCidrPerCountry(file string, m map[string]string, list map[string][]*rout return nil } +func getCNIPv4Cidr(url string) (cnIPv4CidrList []string, err error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + + req.Header.Set("Accept-Encoding", "gzip") + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + data, err := gzip.NewReader(resp.Body) + if err != nil { + return nil, err + } + defer data.Close() + + body, err := ioutil.ReadAll(data) + if err != nil { + return nil, err + } + + cnIPv4CidrList = strings.Split(string(body), "\n") + fmt.Println("The length of cnIPv4CIDRList is", len(cnIPv4CidrList)) + + return cnIPv4CidrList, nil +} + +func changeCNIPv4Cidr(url string, m map[string]string, list map[string][]*router.CIDR) error { + // delete "CN" Key in list + delete(list, "CN") + fmt.Println("Successfully deleted CN IPv4 CIDR") + fmt.Println(list["CN"]) + + cnIPv4CidrList, err := getCNIPv4Cidr(url) + if err != nil { + return err + } + + for _, cnIPv4Cidr := range cnIPv4CidrList { + cnIPv4Cidr, err := conf.ParseIP(strings.TrimSpace(cnIPv4Cidr)) + if err != nil { + return err + } + cidrs := append(list["CN"], cnIPv4Cidr) + list["CN"] = cidrs + } + + return nil +} + func main() { flag.Parse() @@ -90,6 +146,10 @@ func main() { fmt.Println("Error loading IPv4 file:", err) return } + if err := changeCNIPv4Cidr(*cnIPv4CIDRURL, ccMap, cidrList); err != nil { + fmt.Println("Error loading cnIPv4CIDR data:", err) + return + } if err := getCidrPerCountry(*ipv6File, ccMap, cidrList); err != nil { fmt.Println("Error loading IPv6 file:", err) return |
