07c61c1b1c
First push for beginning of project
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package shodan
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/ns3777k/go-shodan/v4/shodan"
|
|
|
|
"git.tcp.direct/perp/shogo/internal/utils"
|
|
)
|
|
|
|
// Return host information
|
|
func Host(ip string) {
|
|
// Get results
|
|
results, err := utils.Client.GetServicesForHost(
|
|
context.Background(),
|
|
ip,
|
|
&shodan.HostServicesOptions{},
|
|
)
|
|
if err != nil {
|
|
fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error())
|
|
return
|
|
}
|
|
|
|
// Print results
|
|
utils.Title.Printf("Host: %s\n", ip)
|
|
fmt.Printf(
|
|
"%s: %s\n",
|
|
utils.Green("Hostnames"),
|
|
utils.Blue(strings.Join(results.Hostnames, ",")),
|
|
)
|
|
fmt.Printf("%s: %s\n", utils.Blue("Organization"), utils.Green(results.Organization))
|
|
fmt.Printf("%s: %s\n", utils.Green("Country"), utils.Blue(results.Country))
|
|
fmt.Printf("%s: %s\n", utils.Blue("City"), utils.Green(results.City))
|
|
fmt.Printf("%s: %s\n", utils.Green("Updated"), utils.Blue(results.LastUpdate))
|
|
fmt.Printf("%s: %s\n", utils.Blue("Port count"), utils.Green(len(results.Ports)))
|
|
fmt.Printf("\n%s:\n", utils.Green("Ports"))
|
|
|
|
// Color alternator & current line
|
|
var alternate bool
|
|
var line string
|
|
|
|
for index := range results.Data {
|
|
// Alternate between colors
|
|
// Find each port & transport
|
|
if alternate {
|
|
alternate = false
|
|
line = fmt.Sprintf(
|
|
"\t%s/%s",
|
|
utils.Blue(results.Data[index].Port),
|
|
utils.Green(results.Data[index].Transport),
|
|
)
|
|
} else if !alternate {
|
|
alternate = true
|
|
line = 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 {
|
|
line = fmt.Sprintf("%s (%s)", line, utils.Green(results.Data[index].Product))
|
|
} else if !alternate {
|
|
line = fmt.Sprintf("%s (%s)", line, utils.Blue(results.Data[index].Product))
|
|
}
|
|
}
|
|
|
|
// Print results
|
|
fmt.Println(line)
|
|
}
|
|
}
|