9fa5d13bf6
Some of keywords are indexed and open for full text search, please refer to the README for more details. CertStream, Pastebin and Shodan are running as services and can be searched. Next steps: building the matcher and creating edges.
86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
package filters
|
|
|
|
import (
|
|
"bufio"
|
|
"io/ioutil"
|
|
"net"
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"runtime"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
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
|
|
}
|
|
if ip.To4() != nil {
|
|
path := basepath + "/data/ipv4/"
|
|
sliceIPv4, err := ioutil.ReadDir(path)
|
|
if err != nil {
|
|
logrus.Warn("filters#ReadDir#ipv4", err)
|
|
}
|
|
|
|
for _, file := range sliceIPv4 {
|
|
f, err := os.OpenFile(path+file.Name(), 1, 0644)
|
|
if err != nil {
|
|
logrus.Warn("filters#OpenFile#", err)
|
|
}
|
|
scanner := bufio.NewScanner(f)
|
|
for scanner.Scan() {
|
|
_, ipNet, err := net.ParseCIDR(scanner.Text())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if ipNet.Contains(ip) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
} else if ip.To16() != nil {
|
|
// run ipv6 filter battery
|
|
} else {
|
|
logrus.Error("filters#invalid IP format for", inputIP)
|
|
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)
|
|
}
|
|
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
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|