shogo/internal/shodan/stats.go
perp c47bec5f76 💥 Remade all commands
Remade all commands for the pool.
2023-08-03 23:48:39 +01:00

70 lines
1.4 KiB
Go

package shodan
import (
"context"
"fmt"
"strings"
"github.com/ns3777k/go-shodan/v4/shodan"
"git.tcp.direct/perp/shogo/internal/utils"
)
// Stats query
type Stats struct {
Query string // Search query
Page int // Current page
Results chan string // Results channel
}
// Return facet stats on a search
func (s *Shodan) Stats() {
// Setup options
options := &shodan.HostQueryOptions{
Query: s.Flags.Query,
Facets: s.Flags.Facets,
Page: 1,
}
// Get results
results, err := utils.Client.GetHostsForQuery(context.Background(), options)
if err != nil {
s.Results <- fmt.Sprintf("%s: %s", utils.Red("Error"), err.Error())
return
}
// Store lines
var lines string
// Split facets
splitted := strings.Split(s.Flags.Facets, ",")
// Go through splitted
for split := range splitted {
// Get facet & count
facet := strings.Split(splitted[split], ":")
// Add lines
lines += utils.Title.Sprintf(
"\nTop %s results for %s query with %s facet\n",
facet[1],
s.Flags.Query,
facet[0],
)
for index := range results.Facets[facet[0]] {
lines += fmt.Sprintf(
"%s: %s\n",
utils.Green(results.Facets[facet[0]][index].Value),
utils.Blue(results.Facets[facet[0]][index].Count),
)
}
}
// Remove empty newline(s)
// Send results
lines = strings.Replace(lines, "\n", "", 1)
lines = strings.TrimRight(lines, "\n")
s.Results <- lines
}