diff --git a/cmd/scan.go b/cmd/scan.go index d5f3def..3dfdcc2 100644 --- a/cmd/scan.go +++ b/cmd/scan.go @@ -26,6 +26,7 @@ var ( disableProbing bool disableCache bool format string + include []string ) // The `scan` command is usually the first step to using the CLI tool. @@ -141,6 +142,7 @@ var ScanCmd = &cobra.Command{ Verbose: verbose, Debug: debug, Insecure: insecure, + Include: include, }) switch format { @@ -215,6 +217,7 @@ func init() { ScanCmd.Flags().BoolVar(&insecure, "insecure", false, "Skip TLS certificate verification during probe") ScanCmd.Flags().StringVarP(&format, "format", "F", "db", "Output format (db, json, yaml)") ScanCmd.Flags().StringVarP(&outputPath, "output", "o", "", "Output file path (for json/yaml formats)") + ScanCmd.Flags().StringSliceVar(&include, "include", []string{"bmcs"}, "Asset types to scan for (bmcs, pdus)") checkBindFlagError(viper.BindPFlag("scan.ports", ScanCmd.Flags().Lookup("port"))) checkBindFlagError(viper.BindPFlag("scan.scheme", ScanCmd.Flags().Lookup("scheme"))) diff --git a/pkg/scan.go b/pkg/scan.go index af4907f..27c0411 100644 --- a/pkg/scan.go +++ b/pkg/scan.go @@ -36,6 +36,7 @@ type ScanParams struct { Verbose bool Debug bool Insecure bool + Include []string } // ScanForAssets() performs a net scan on a network to find available services @@ -66,9 +67,14 @@ func ScanForAssets(params *ScanParams) []RemoteAsset { probesToRun := []struct { Type, Path string - }{ - {Type: "Redfish", Path: "/redfish/v1/"}, - {Type: "JAWS", Path: "/jaws/monitor/outlets"}, + }{} + for _, item := range params.Include { + if item == "bmcs" { + probesToRun = append(probesToRun, struct{ Type, Path string }{Type: "Redfish", Path: "/redfish/v1/"}) + } + if item == "pdus" { + probesToRun = append(probesToRun, struct{ Type, Path string }{Type: "JAWS", Path: "/jaws/monitor/outlets"}) + } } transport := &http.Transport{