styx/filters/main.go
Christopher Talib 9fa5d13bf6 Full text search and indexing some keywords
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.
2020-05-20 10:03:28 +02:00

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
}