iplistget/sources/openbl.go

53 lines
863 B
Go

package sources
import (
"bufio"
"git.veenee.ru/veenee/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
}