shogo/internal/shodan/host.go

84 lines
2.1 KiB
Go
Raw Normal View History

package shodan
import (
"context"
"fmt"
"strings"
"github.com/ns3777k/go-shodan/v4/shodan"
"git.tcp.direct/perp/shogo/internal/utils"
)
// Return host information
func (s *Shodan) Host() {
// Get results
results, err := utils.Client.GetServicesForHost(
context.Background(),
s.Flags.Query,
&shodan.HostServicesOptions{},
)
if err != nil {
s.Results <- fmt.Sprintf("%s: %s", utils.Red("Error"), err.Error())
return
}
// Alternate between colors
var alternate bool
// Store lines
var lines string
// Store port/protocol/service
var port string
// Add lines
lines += utils.Title.Sprintf("Host: %s\n", s.Flags.Query)
lines += fmt.Sprintf(
"%s: %s\n",
utils.Green("Hostnames"),
utils.Blue(strings.Join(results.Hostnames, ",")),
)
lines += fmt.Sprintf("%s: %s\n", utils.Blue("Organization"), utils.Green(results.Organization))
lines += fmt.Sprintf("%s: %s\n", utils.Green("Country"), utils.Blue(results.Country))
lines += fmt.Sprintf("%s: %s\n", utils.Blue("City"), utils.Green(results.City))
lines += fmt.Sprintf("%s: %s\n", utils.Green("Updated"), utils.Blue(results.LastUpdate))
lines += fmt.Sprintf("%s: %s\n", utils.Blue("Port count"), utils.Green(len(results.Ports)))
lines += fmt.Sprintf("\n%s:\n", utils.Green("Ports"))
// Go through data
for index := range results.Data {
// Alternate between colors
// Find port & transport
if alternate {
alternate = false
port = fmt.Sprintf(
"\t%s/%s",
utils.Blue(results.Data[index].Port),
utils.Green(results.Data[index].Transport),
)
} else if !alternate {
alternate = true
port = fmt.Sprintf(
"\t%s/%s",
utils.Green(results.Data[index].Port),
utils.Blue(results.Data[index].Transport),
)
}
// Find each product
if results.Data[index].Product != "" {
if alternate {
port = fmt.Sprintf("%s (%s)", port, utils.Green(results.Data[index].Product))
} else if !alternate {
port = fmt.Sprintf("%s (%s)", port, utils.Blue(results.Data[index].Product))
}
}
lines += port + "\n"
}
// Remove empty newline
// Send results
lines = strings.TrimRight(lines, "\n")
s.Results <- lines
}