From d3744a9dff46a06a01712499af6cffdd6dae805a Mon Sep 17 00:00:00 2001 From: perp Date: Wed, 2 Aug 2023 04:58:30 +0100 Subject: [PATCH] :sparkles: Scan commands Added 3 scan commands (internet, protocols and submit). --- internal/shodan/scan/internet.go | 42 ++++++++++++++++++++++++++ internal/shodan/scan/protocols.go | 25 ++++++++++++++++ internal/shodan/scan/submit.go | 50 +++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 internal/shodan/scan/internet.go create mode 100644 internal/shodan/scan/protocols.go create mode 100644 internal/shodan/scan/submit.go diff --git a/internal/shodan/scan/internet.go b/internal/shodan/scan/internet.go new file mode 100644 index 0000000..115e987 --- /dev/null +++ b/internal/shodan/scan/internet.go @@ -0,0 +1,42 @@ +package scan + +import ( + "context" + "fmt" + "time" + + "git.tcp.direct/perp/shogo/internal/utils" +) + +// Submit an internet scan +func Internet(port int, protocol string) { + // Get results + results, err := utils.Client.ScanInternet(context.Background(), port, protocol) + if err != nil { + fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error()) + return + } + + // Print results + utils.Title.Printf("Scanning internet for %d %s\n", port, protocol) + + fmt.Printf("%s: %s\n", utils.Green("ID"), utils.Blue(results)) + + for { + time.Sleep(time.Second * 3) + + // Get results + results, err := utils.Client.GetScanStatus(context.Background(), results) + if err != nil { + fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error()) + return + } + + // Get status + switch results.Status { + case "DONE": + fmt.Printf("%s: %s\n", utils.Blue("Status"), utils.Green(results.Status)) + return + } + } +} diff --git a/internal/shodan/scan/protocols.go b/internal/shodan/scan/protocols.go new file mode 100644 index 0000000..37ef1bf --- /dev/null +++ b/internal/shodan/scan/protocols.go @@ -0,0 +1,25 @@ +package scan + +import ( + "context" + "fmt" + + "git.tcp.direct/perp/shogo/internal/utils" +) + +// Return protocols to scan +func Protocols() { + // Get results + results, err := utils.Client.GetProtocols(context.Background()) + if err != nil { + fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error()) + return + } + + // Print results + utils.Title.Println("Protocols") + + for key, value := range results { + fmt.Printf("%-36s %s\n", utils.Green(key), utils.Blue(value)) + } +} diff --git a/internal/shodan/scan/submit.go b/internal/shodan/scan/submit.go new file mode 100644 index 0000000..a56f4eb --- /dev/null +++ b/internal/shodan/scan/submit.go @@ -0,0 +1,50 @@ +package scan + +import ( + "context" + "fmt" + "time" + + "git.tcp.direct/perp/shogo/internal/utils" +) + +// Submit a scan +func Submit(ips []string) { + // Get results + results, err := utils.Client.Scan(context.Background(), ips) + if err != nil { + fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error()) + return + } + + // Print results + utils.Title.Printf("Starting scan for %s\n", ips) + + fmt.Printf( + "%s: %s\n%s: %s\n%s: %s\n", + utils.Green("ID"), + utils.Blue(results.ID), + utils.Blue("Count"), + utils.Green(results.Count), + utils.Green("Credits left"), + utils.Blue(results.CreditsLeft), + ) + + for { + time.Sleep(time.Second * 3) + + // Get results + results, err := utils.Client.GetScanStatus(context.Background(), results.ID) + if err != nil { + fmt.Printf("%s: %s\n", utils.Red("Error"), err.Error()) + return + } + + // Get status + switch results.Status { + case "DONE": + fmt.Printf("%s: %s\n", utils.Blue("Status"), utils.Green(results.Status)) + return + } + } +}