styx/filters/main.go

89 lines
1.7 KiB
Go
Raw Normal View History

2020-02-14 20:46:09 +01:00
package filters
import (
"bufio"
2020-02-18 12:21:39 +01:00
"io/ioutil"
2020-02-14 20:46:09 +01:00
"net"
"os"
2020-02-18 12:21:39 +01:00
"path/filepath"
"regexp"
2020-02-18 12:21:39 +01:00
"runtime"
2020-02-14 20:46:09 +01:00
"github.com/sirupsen/logrus"
)
2020-02-18 12:21:39 +01:00
var (
_, b, _, _ = runtime.Caller(0)
basepath = filepath.Dir(b)
)
// RunIPFilters runs the battery of filters for an IP.
func RunIPFilters(inputIP string) bool {
ip := net.ParseIP(inputIP)
if ip == nil {
return false
}
2020-02-14 20:46:09 +01:00
if ip.To4() != nil {
2020-02-18 12:21:39 +01:00
path := basepath + "/data/ipv4/"
sliceIPv4, err := ioutil.ReadDir(path)
2020-02-14 20:46:09 +01:00
if err != nil {
2020-02-18 12:21:39 +01:00
logrus.Warn("filters#ReadDir#ipv4", err)
2020-02-14 20:46:09 +01:00
}
2020-02-18 12:21:39 +01:00
for _, file := range sliceIPv4 {
f, err := os.OpenFile(path+file.Name(), 1, 0644)
2020-02-18 12:21:39 +01:00
if err != nil {
logrus.Warn("filters#OpenFile#", err)
}
defer f.Close()
2020-02-18 12:21:39 +01:00
scanner := bufio.NewScanner(f)
for scanner.Scan() {
_, ipNet, err := net.ParseCIDR(scanner.Text())
if err != nil {
continue
}
if ipNet.Contains(ip) {
return true
}
}
2020-02-14 20:46:09 +01:00
}
2020-02-18 12:21:39 +01:00
} else if ip.To16() != nil {
// run ipv6 filter battery
2020-02-14 20:46:09 +01:00
} else {
logrus.Error("filters#invalid IP format for", inputIP)
2020-02-14 20:46:09 +01:00
return false
}
return false
}
// RunDomainFilters run filters on a targeted domain.
func RunDomainFilters(domain string) bool {
path := basepath + "/data/domain/"
sliceDomain, err := ioutil.ReadDir(path)
if err != nil {
logrus.Warn("filters#ReadDir#domains", err)
}
for _, file := range sliceDomain {
f, err := os.OpenFile(path+file.Name(), 1, 0644)
if err != nil {
logrus.Warn("filters#OpenFile#", err)
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
r, err := regexp.Compile(scanner.Text())
if err != nil {
logrus.Warn("filters#Compile#", err)
}
if r.MatchString(domain) {
return false
}
}
2020-02-14 20:46:09 +01:00
}
return true
2020-02-14 20:46:09 +01:00
}