From 91cc6382926f6232c78039bd19d39e5b0f164c41 Mon Sep 17 00:00:00 2001 From: Neriberto CP Date: Fri, 21 Jun 2024 21:21:39 -0300 Subject: [PATCH 1/2] chore: Implements SQLite --- cmd/hednsextractor/hednsextractor.go | 9 ++ go.mod | 17 ++- go.sum | 48 ++++++- utils/report.go | 181 +++++++++++++++++++++++++++ 4 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 utils/report.go diff --git a/cmd/hednsextractor/hednsextractor.go b/cmd/hednsextractor/hednsextractor.go index 7f002e5..c67d9bc 100644 --- a/cmd/hednsextractor/hednsextractor.go +++ b/cmd/hednsextractor/hednsextractor.go @@ -49,6 +49,15 @@ func main() { gologger.Info().Msgf("Filtering with Virustotal with a mininum score %s", utils.OptionCmd.VtscoreValue) } + // Print the results + report := utils.NewReport() + report.Import() + report.Enrich(utils.OptionCmd.Vtscore) + report.Show(utils.OptionCmd.Vtscore, utils.OptionCmd.VtscoreValue) + report.Close() + + return + for _, result := range utils.Results { var bMatchedPTR = false var bMatchedDomain = false diff --git a/go.mod b/go.mod index db90f91..2c9b8a1 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/projectdiscovery/utils v0.0.92 github.com/tidwall/gjson v1.17.1 gopkg.in/yaml.v2 v2.4.0 + modernc.org/sqlite v1.30.1 ) require ( @@ -21,22 +22,29 @@ require ( github.com/andybalholm/cascadia v1.3.2 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aymerick/douceur v0.2.0 // indirect + github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/cloudflare/circl v1.3.8 // indirect github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/css v1.0.1 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mholt/archiver/v3 v3.5.1 // indirect github.com/microcosm-cc/bluemonday v1.0.26 // indirect github.com/miekg/dns v1.1.59 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/nwaples/rardecode v1.1.3 // indirect github.com/onsi/gomega v1.33.1 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect @@ -47,6 +55,7 @@ require ( github.com/projectdiscovery/networkpolicy v0.0.8 // indirect github.com/projectdiscovery/retryabledns v1.0.58 // indirect github.com/refraction-networking/utls v1.6.6 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tidwall/btree v1.7.0 // indirect @@ -74,4 +83,10 @@ require ( golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gopkg.in/djherbis/times.v1 v1.3.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect -) \ No newline at end of file + modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect + modernc.org/libc v1.52.1 // indirect + modernc.org/mathutil v1.6.0 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/strutil v1.2.0 // indirect + modernc.org/token v1.1.0 // indirect +) diff --git a/go.sum b/go.sum index 95fdb9e..f31b29c 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,8 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bloom/v3 v3.5.0 h1:AKDvi1V3xJCmSR6QhcBfHbCN4Vf8FfxeWkMNQfmAGhY= github.com/bits-and-blooms/bloom/v3 v3.5.0/go.mod h1:Y8vrn7nk1tPIlmLtW2ZPV+W7StdVMor6bC1xgpjMZFs= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= @@ -39,6 +39,8 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -59,10 +61,14 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-github/v50 v50.2.0/go.mod h1:VBY8FB6yPIjrtKhozXv4FQupxKLS6H4m6xFZlT43q8Q= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= -github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM= -github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -85,6 +91,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= @@ -98,6 +106,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= github.com/mreiferson/go-httpclient v0.0.0-20201222173833-5e475fde3a4d/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= @@ -138,6 +148,8 @@ github.com/projectdiscovery/utils v0.0.92 h1:lGCmjUJhzoNX4FQZWpp80058pRlD0/dYxLJ github.com/projectdiscovery/utils v0.0.92/go.mod h1:d5uvD5qcRiK3qxZbBy9eatCqrCSuj9SObL04w/WgXSg= github.com/refraction-networking/utls v1.6.6 h1:igFsYBUJPYM8Rno9xUuDoM5GQrVEqY4llzEXOkL43Ig= github.com/refraction-networking/utls v1.6.6/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -317,4 +329,30 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= \ No newline at end of file +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.21.2 h1:dycHFB/jDc3IyacKipCNSDrjIC0Lm1hyoWOZTRR20Lk= +modernc.org/cc/v4 v4.21.2/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.17.10 h1:6wrtRozgrhCxieCeJh85QsxkX/2FFrT9hdaWPlbn4Zo= +modernc.org/ccgo/v4 v4.17.10/go.mod h1:0NBHgsqTTpm9cA5z2ccErvGZmtntSM9qD2kFAs6pjXM= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.52.1 h1:uau0VoiT5hnR+SpoWekCKbLqm7v6dhRL3hI+NQhgN3M= +modernc.org/libc v1.52.1/go.mod h1:HR4nVzFDSDizP620zcMCgjb1/8xk2lg5p/8yjfGv1IQ= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.30.1 h1:YFhPVfu2iIgUf9kuA1CR7iiHdcEEsI2i+yjRYHscyxk= +modernc.org/sqlite v1.30.1/go.mod h1:DUmsiWQDaAvU4abhc/N+djlom/L2o8f7gZ95RCvyoLU= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/utils/report.go b/utils/report.go new file mode 100644 index 0000000..613dfb8 --- /dev/null +++ b/utils/report.go @@ -0,0 +1,181 @@ +package utils + +import ( + "database/sql" + "fmt" + "strconv" + + //_ "github.com/mattn/go-sqlite3" + "github.com/projectdiscovery/gologger" + _ "modernc.org/sqlite" +) + +type Report struct { + Database string + db *sql.DB +} + +func NewReport() *Report { + database := "results.sqlite" + db, err := sql.Open("sqlite", database) + if err != nil { + gologger.Error().Msgf("Error opening the database: %s", err) + return nil + } + + return &Report{ + Database: database, + db: db, + } +} + +func (r *Report) CreateTables() error { + _, err := r.db.Exec("CREATE TABLE IF NOT EXISTS results (domain TEXT, ptr TEXT, ipaddr TEXT, vt_domain_score INTEGER DEFAULT 0, vt_ip_score INTEGER DEFAULT 0)") + if err != nil { + return err + } + return nil +} + +func (r *Report) Import() { + + // Create the table if not exists + err := r.CreateTables() + if err != nil { + gologger.Error().Msgf("Error creating the table: %s", err) + return + } + + for _, result := range Results { + // check if the record exists + var exists bool + err := r.db.QueryRow("SELECT EXISTS(SELECT 1 FROM results WHERE domain = ? AND ptr = ? AND ipaddr = ?)", result.Domain, result.PTR, result.IPAddr).Scan(&exists) + if err != nil { + gologger.Error().Msgf("Error querying the database: %s", err) + return + } + + if !exists { + _, err := r.db.Exec("INSERT INTO results (domain, ptr, ipaddr) VALUES (?, ?, ?)", result.Domain, result.PTR, result.IPAddr) + if err != nil { + gologger.Error().Msgf("Error inserting into the database: %s", err) + return + } + } + } +} + +func (r *Report) Enrich(VTEnable bool) { + if VTEnable { + // Enrich the domain + r.EnrichVTDomain() + + // Enrich the IP + r.EnrichVTIP() + } +} + +func (r *Report) EnrichVTDomain() { + rows, err := r.db.Query("SELECT DISTINCT domain FROM results") + if err != nil { + gologger.Error().Msgf("Error querying the database: %s", err) + return + } + + // Iterate over the rows + domains := make([]string, 0) + for rows.Next() { + var domain string + err = rows.Scan(&domain) + domains = append(domains, domain) + if err != nil { + gologger.Error().Msgf("Error scanning the row: %s", err) + return + } + } + + virustotal := Virustotal{} + for _, domain := range domains { + // Get the VT score + score := virustotal.GetVtReport(domain) + _, err := r.db.Exec("UPDATE results SET vt_domain_score = ? WHERE domain = ?", score, domain) + if err != nil { + gologger.Error().Msgf("Error updating the database: %s", err) + return + } + } +} + +func (r *Report) EnrichVTIP() { + rows, err := r.db.Query("SELECT DISTINCT ipaddr FROM results") + if err != nil { + gologger.Error().Msgf("Error querying the database: %s", err) + return + } + + // Iterate over the rows + ipaddresses := make([]string, 0) + for rows.Next() { + var ipaddr string + err = rows.Scan(&ipaddr) + ipaddresses = append(ipaddresses, ipaddr) + if err != nil { + gologger.Error().Msgf("Error scanning the row: %s", err) + return + } + } + + virustotal := Virustotal{} + for _, ipaddr := range ipaddresses { + // Get the VT score + score := virustotal.GetVtReport(ipaddr) + _, err := r.db.Exec("UPDATE results SET vt_ip_score = ? WHERE ipaddr = ?", score, ipaddr) + if err != nil { + gologger.Error().Msgf("Error updating the database: %s", err) + return + } + } +} + +func (r *Report) Show(VTEnable bool, VtScore string) { + score, err := strconv.ParseUint(VtScore, 10, 64) + if VTEnable && err != nil { + gologger.Error().Msgf("Invalid parameter value for vt-score: %s", err) + return + } + + // if VTEnable the select for vt_domain_score must be greater than score + // if VTEnable the select for vt_ip_score must be greater than score + var stmt string + if VTEnable { + gologger.Info().Msgf("Showing results with VT score greater than %d", score) + stmt = fmt.Sprintf("SELECT * FROM results WHERE vt_domain_score >= %d AND vt_ip_score >= %d", score, score) + } else { + stmt = "SELECT * FROM results" + } + + // Query the database and print all rows + rows, err := r.db.Query(stmt) + if err != nil { + gologger.Error().Msgf("Error querying the database: %s", err) + return + } + + // Iterate over the rows + for rows.Next() { + var domain, ptr, ipaddr string + var vtDomainScore, vtIpScore int + err = rows.Scan(&domain, &ptr, &ipaddr, &vtDomainScore, &vtIpScore) + if err != nil { + gologger.Error().Msgf("Error scanning the row: %s", err) + return + } + + gologger.Info().Msgf("Domain: %s, PTR: %s, IP: %s, VT Domain Score: %d, VT IP Score: %d", domain, ptr, ipaddr, vtDomainScore, vtIpScore) + } +} + +func (r *Report) Close() { + // Close the database + defer r.db.Close() +} From c7f79e1a9e90467992849714216d0d19b1502372 Mon Sep 17 00:00:00 2001 From: Neriberto CP Date: Sat, 6 Jul 2024 14:00:48 -0300 Subject: [PATCH 2/2] chore: Using sqlite in memory, add logger --- utils/hurricane.go | 1 + utils/report.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/hurricane.go b/utils/hurricane.go index 4790a0f..aa25dbe 100644 --- a/utils/hurricane.go +++ b/utils/hurricane.go @@ -97,6 +97,7 @@ func (h *Hurricane) ExtractDomain(domain string) { gologger.Info().Msgf("[%s] network: %s\n", domain, match[1]) } Networks = append(Networks, match[1]) + gologger.Verbose().Msgf("Identifying domains for network: %s", match[1]) } } } diff --git a/utils/report.go b/utils/report.go index 613dfb8..7626e83 100644 --- a/utils/report.go +++ b/utils/report.go @@ -16,7 +16,8 @@ type Report struct { } func NewReport() *Report { - database := "results.sqlite" + //database := "results.sqlite" + database := "::memory:" db, err := sql.Open("sqlite", database) if err != nil { gologger.Error().Msgf("Error opening the database: %s", err)