diff --git a/pkg/config/config.go b/pkg/config/config.go index 99aa618..845fcfd 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -16,6 +16,7 @@ type Settings struct { Ports string Dorking bool Git bool + Whois bool Threads int Nuclei bool Timeout time.Duration @@ -58,6 +59,7 @@ func Parse() *Settings { flagSet.BoolVar(&settings.Git, "git", false, "Enable git repository scanning"), flagSet.BoolVar(&settings.Nuclei, "nuclei", false, "Enable scanning using nuclei templates"), flagSet.BoolVar(&settings.NoScan, "noscan", false, "Do not perform base URL (robots.txt, etc) scanning"), + flagSet.BoolVar(&settings.Whois, "whois", false, "Enable WHOIS lookup"), ) flagSet.CreateGroup("runtime", "Runtime", diff --git a/pkg/scan/whois.go b/pkg/scan/whois.go new file mode 100644 index 0000000..239afdc --- /dev/null +++ b/pkg/scan/whois.go @@ -0,0 +1,36 @@ +package scan + +import ( + "fmt" + "os" + "strings" + + "github.com/charmbracelet/log" + "github.com/dropalldatabases/sif/internal/styles" + "github.com/dropalldatabases/sif/pkg/logger" + "github.com/likexian/whois" +) + +func Whois(url string, logdir string) { + fmt.Println(styles.Separator.Render("💭 Starting " + styles.Status.Render("WHOIS Lookup") + "...")) + + sanitizedURL := strings.Split(url, "://")[1] + if logdir != "" { + if err := logger.WriteHeader(sanitizedURL, logdir, " port scanning"); err != nil { + log.Errorf("Error creating log file: %v", err) + return + } + } + + whoislog := log.NewWithOptions(os.Stderr, log.Options{ + Prefix: "WHOIS 💭", + }) + + whoislog.Infof("Starting WHOIS") + + result, err := whois.Whois(sanitizedURL) + if err == nil { + log.Info(result) + logger.Write(sanitizedURL, logdir, result) + } +} diff --git a/sif.go b/sif.go index ac448c7..83291d2 100644 --- a/sif.go +++ b/sif.go @@ -102,6 +102,10 @@ func (app *App) Run() error { scan.Ports(app.settings.Ports, url, app.settings.Timeout, app.settings.Threads, app.settings.LogDir) } + if app.settings.Whois { + scan.Whois(url, app.settings.LogDir) + } + if app.settings.ApiMode { utils.ReturnApiOutput() }