package sources import ( "bufio" "bytes" "io" "git.veenee.ru/veenee/iplistget/common" "net" "strings" ) func init() { common.RegisterSource(Antizapret{URL: "https://api.antizapret.info/group.php?data=ip"}) } type Antizapret struct { URL string } func (s Antizapret) Get(url string) ([]net.IPNet, error) { if url != "" { s.URL = url } data, err := common.FetchURL(s.URL) if err != nil { return nil, err } ipmap := map[string]bool{} br := bytes.NewReader(data) reader := bufio.NewReader(br) for { line, err := reader.ReadString('\n') ips := strings.Split(line, ",") for ipk := range ips { // Add /32 prefix if no exist, then add to the map ip := strings.Trim(ips[ipk], "\n, ") if !strings.Contains(ip, "/") { ip += "/32" } ipmap[ip] = true } if err == io.EOF { break } } iplist := make([]net.IPNet, 0, len(ipmap)) for key, _ := range ipmap { if _, ipnet, err := net.ParseCIDR(key); err == nil { iplist = append(iplist, *ipnet) } } return iplist, nil }