61 lines
1.0 KiB
Go
61 lines
1.0 KiB
Go
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
|
|
}
|