mirror of
https://github.com/lunchcat/sif.git
synced 2026-01-15 22:32:37 -08:00
dns list feature + timeout
This commit is contained in:
committed by
Sol Fisher Romanoff
parent
cbeb66631c
commit
355d8a7f81
@@ -5,6 +5,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/charmbracelet/log"
|
||||
@@ -26,7 +27,7 @@ var directorystyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Underline(true)
|
||||
|
||||
func Dirlist(size string, url string) {
|
||||
func Dirlist(size string, url string, timeout time.Duration) {
|
||||
|
||||
logger := log.NewWithOptions(os.Stderr, log.Options{
|
||||
Prefix: "Dirlist 📂",
|
||||
@@ -59,7 +60,9 @@ func Dirlist(size string, url string) {
|
||||
}
|
||||
|
||||
// util.InitProgressBar()
|
||||
client := &http.Client{}
|
||||
client := &http.Client{
|
||||
Timeout: timeout,
|
||||
}
|
||||
for _, directory := range directories {
|
||||
log.Debugf("%s", directory)
|
||||
resp, err := client.Get(url + "/" + directory)
|
||||
|
||||
81
cmd/dnslist.go
Normal file
81
cmd/dnslist.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/charmbracelet/log"
|
||||
// "github.com/pushfs/sif/util"
|
||||
)
|
||||
|
||||
const (
|
||||
dnsURL = "https://raw.githubusercontent.com/pushfs/sif-runtime/main/dnslist/"
|
||||
dnsSmallFile = "subdomains-100.txt"
|
||||
dnsMediumFile = "subdomains-1000.txt"
|
||||
dnsBigFile = "subdomains-10000.txt"
|
||||
)
|
||||
|
||||
var dnsstyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Underline(true)
|
||||
|
||||
func Dnslist(size string, url string, timeout time.Duration) {
|
||||
|
||||
logger := log.NewWithOptions(os.Stderr, log.Options{
|
||||
Prefix: "Dnslist 📡",
|
||||
})
|
||||
dnslog := logger.With("url", url)
|
||||
|
||||
var list string
|
||||
|
||||
switch size {
|
||||
case "small":
|
||||
list = dnsURL + dnsSmallFile
|
||||
case "medium":
|
||||
list = dnsURL + dnsMediumFile
|
||||
case "large":
|
||||
list = dnsURL + dnsBigFile
|
||||
}
|
||||
|
||||
dnslog.Infof("Starting %s DNS listing", size)
|
||||
|
||||
resp, err := http.Get(list)
|
||||
if err != nil {
|
||||
log.Errorf("Error downloading DNS list: %s", err)
|
||||
return
|
||||
}
|
||||
var dns []string
|
||||
scanner := bufio.NewScanner(resp.Body)
|
||||
scanner.Split(bufio.ScanLines)
|
||||
for scanner.Scan() {
|
||||
dns = append(dns, scanner.Text())
|
||||
}
|
||||
|
||||
// util.InitProgressBar()
|
||||
|
||||
sanitizedURL := strings.Split(url, "://")[1]
|
||||
|
||||
client := &http.Client{
|
||||
Timeout: timeout,
|
||||
}
|
||||
for _, domain := range dns {
|
||||
log.Debugf("Looking up: %s", domain)
|
||||
_, err := client.Get("http://" + domain + "." + sanitizedURL)
|
||||
if err != nil {
|
||||
log.Debugf("Error %s: %s", domain, err)
|
||||
} else {
|
||||
dnslog.Infof("%s %s.%s", statusstyle.Render("[http]"), dnsstyle.Render(domain), sanitizedURL)
|
||||
}
|
||||
|
||||
_, err = client.Get("https://" + domain + "." + sanitizedURL)
|
||||
if err != nil {
|
||||
log.Debugf("Error %s: %s", domain, err)
|
||||
} else {
|
||||
dnslog.Infof("%s %s.%s", statusstyle.Render("[https]"), dnsstyle.Render(domain), sanitizedURL)
|
||||
}
|
||||
}
|
||||
}
|
||||
17
config.go
17
config.go
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/charmbracelet/log"
|
||||
"github.com/spf13/pflag"
|
||||
@@ -11,17 +12,28 @@ import (
|
||||
type Settings struct {
|
||||
URLs []string
|
||||
Dirlist string
|
||||
Dnslist string
|
||||
Debug bool
|
||||
Timeout time.Duration
|
||||
}
|
||||
|
||||
func parseURLs() Settings {
|
||||
var debug = pflag.BoolP("debug", "d", false, "Enable debug logging")
|
||||
|
||||
var timeout = pflag.DurationP("timeout", "t", 10*time.Second, "General http timeout value - Default is 10 seconds")
|
||||
|
||||
var url = pflag.StringArrayP("url", "u", []string{}, "URL to check")
|
||||
var file = pflag.StringP("file", "f", "", "File that includes URLs to check")
|
||||
var dirlist = pflag.String("dirlist", "none", "Dirlist scan size (small, medium, large)")
|
||||
var dirlist = pflag.String("dirlist", "none", "Directory fuzzing scan size (small, medium, large)")
|
||||
var dnslist = pflag.String("dnslist", "none", "DNS fuzzing scan size (small, medium, large)")
|
||||
pflag.Parse()
|
||||
|
||||
if len(*url) > 0 {
|
||||
return Settings{
|
||||
Debug: *debug,
|
||||
Timeout: *timeout,
|
||||
Dirlist: *dirlist,
|
||||
Dnslist: *dnslist,
|
||||
URLs: *url,
|
||||
}
|
||||
} else if *file != "" {
|
||||
@@ -44,7 +56,10 @@ func parseURLs() Settings {
|
||||
}
|
||||
|
||||
return Settings{
|
||||
Timeout: *timeout,
|
||||
Debug: *debug,
|
||||
Dirlist: *dirlist,
|
||||
Dnslist: *dnslist,
|
||||
URLs: urls,
|
||||
}
|
||||
}
|
||||
|
||||
12
main.go
12
main.go
@@ -26,13 +26,19 @@ func main() {
|
||||
fmt.Println(style.Render(" _____________\n__________(_)__ __/\n__ ___/_ /__ /_ \n_(__ )_ / _ __/ \n/____/ /_/ /_/"))
|
||||
fmt.Println(subline.Render("https://sif.sh - man's best friend"))
|
||||
|
||||
log.Info("Hello World!")
|
||||
|
||||
settings := parseURLs()
|
||||
|
||||
if settings.Debug {
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
|
||||
for _, url := range settings.URLs {
|
||||
log.Infof("Looking up %s...", url)
|
||||
if settings.Dirlist != "none" {
|
||||
cmd.Dirlist(settings.Dirlist, url)
|
||||
cmd.Dirlist(settings.Dirlist, url, settings.Timeout)
|
||||
}
|
||||
if settings.Dnslist != "none" {
|
||||
cmd.Dnslist(settings.Dnslist, url, settings.Timeout)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user