package sources import ( "bufio" "iplistget/common" "net" "strings" ) func init() { common.RegisterSource(OpenBL{URL: "http://www.openbl.org/lists/base_7days.txt"}) } type OpenBL struct { URL string } func (s OpenBL) Get(url string) ([]net.IPNet, error) { if url != "" { s.URL = url } reader, err := common.URLReader(s.URL) if err != nil { return nil, err } defer reader.Close() ipmap := map[string]bool{} scanner := bufio.NewScanner(reader) for scanner.Scan() { ip := scanner.Text() if !strings.Contains(ip, "/") { ip += "/32" } ipmap[ip] = true } if err := scanner.Err(); err != nil { return nil, err } 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 }