53 lines
842 B
Go
53 lines
842 B
Go
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
|
|
}
|