Skip to content

Commit ccd19c7

Browse files
author
netevert
committed
added database query functionality
1 parent b0aaaec commit ccd19c7

File tree

1 file changed

+67
-20
lines changed

1 file changed

+67
-20
lines changed

delator.go

Lines changed: 67 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@ var (
4343
r = color.New(color.FgHiRed)
4444
writer = new(tabwriter.Writer)
4545
wg = &sync.WaitGroup{}
46-
domain = flag.String("d", "", "input domain")
47-
resolve = flag.Bool("a", false, "view A record")
48-
store = flag.Bool("s", false, "store ct logs")
49-
ver = flag.Bool("c", false, "check version")
50-
utilDescription = "delator -d domain [-acs]"
46+
newSet = flag.NewFlagSet("newSet", flag.ContinueOnError)
47+
domain = newSet.String("d", "", "input domain")
48+
source = newSet.String("s", "", "search source")
49+
resolve = newSet.Bool("a", false, "view A record")
50+
store = newSet.Bool("p", false, "pull ct logs")
51+
ver = newSet.Bool("v", false, "check version")
52+
utilDescription = "delator -d <domain> -s <source> {db|net} [-acv]"
5153
myClient = &http.Client{Timeout: 10 * time.Second}
5254
appVersion = "1.2.0"
5355
banner = `
@@ -201,7 +203,7 @@ func sanitizedInput(input string) (sanitizedDomain string) {
201203
if !validateDomainName(input) {
202204
r.Printf("\nplease supply a valid domain\n\n")
203205
fmt.Println(utilDescription)
204-
flag.PrintDefaults()
206+
newSet.PrintDefaults()
205207
os.Exit(1)
206208
}
207209
sanitizedDomain, _ = publicsuffix.EffectiveTLDPlusOne(input)
@@ -275,7 +277,7 @@ func grabKnownLogs(URL string) *loglist.LogList {
275277
}
276278

277279
// prints a list of all known certificate transparency logs
278-
func printKnownLogs() {
280+
func storeKnownLogs() {
279281
writer.Init(os.Stdout, 10, 8, 0, '\t', tabwriter.AlignRight)
280282
fmt.Fprintln(writer, "Selection\tLog size\tStatus\tLog URL\t")
281283
fmt.Fprintln(writer, "---------\t--------\t------\t-------\t")
@@ -476,20 +478,44 @@ func readDatabase() {
476478
database.Close()
477479
}
478480

481+
// reads subdomains from database
482+
func queryDatabase(query string) {
483+
var id int
484+
var subdomain string
485+
database, _ := sql.Open("sqlite3", "./data.db")
486+
rows, err := database.Query(fmt.Sprintf("SELECT id, subdomain FROM subdomains WHERE subdomain LIKE '%%%s%%'", query))
487+
if err != nil {
488+
fmt.Println(err)
489+
}
490+
defer rows.Close()
491+
for rows.Next() {
492+
err := rows.Scan(&id, &subdomain)
493+
if err != nil {
494+
fmt.Println(err)
495+
}
496+
fmt.Println(subdomain)
497+
}
498+
err = rows.Err()
499+
if err != nil {
500+
fmt.Println(err)
501+
}
502+
database.Close()
503+
}
504+
479505
// sets up command-line arguments and default responses
480506
func setup() {
481-
flag.Usage = func() {
507+
newSet.Usage = func() {
482508
g.Printf(banner)
483509
y.Printf("\nwritten & maintained with ♥ by NetEvert\n\n")
484510
fmt.Println(utilDescription)
485-
flag.PrintDefaults()
511+
newSet.PrintDefaults()
512+
os.Exit(1)
486513
}
487-
488-
flag.Parse()
514+
515+
newSet.Parse(os.Args[1:])
489516

490517
if *store {
491-
// downloadCTLogs()
492-
printKnownLogs()
518+
storeKnownLogs()
493519
os.Exit(1)
494520
}
495521

@@ -506,19 +532,40 @@ func setup() {
506532
if *domain == "" {
507533
r.Printf("\nplease supply a domain\n\n")
508534
fmt.Println(utilDescription)
509-
flag.PrintDefaults()
535+
newSet.PrintDefaults()
536+
os.Exit(1)
537+
}
538+
539+
if *source == "" {
540+
r.Printf("\nplease supply a source {db|all}\n\n")
541+
fmt.Println(utilDescription)
542+
newSet.PrintDefaults()
510543
os.Exit(1)
511544
}
512545
}
513546

514547
// main program entry point
515548
func main() {
516549
setup()
517-
sanitizedDomain := sanitizedInput(*domain)
518-
subdomains := fetchData(fmt.Sprintf("https://crt.sh/?q=%s&output=json", sanitizedDomain))
519-
if *resolve {
520-
printResults(extractSubdomains(subdomains))
521-
} else {
522-
printData(subdomains)
550+
if *source == "net" {
551+
sanitizedDomain := sanitizedInput(*domain)
552+
subdomains := fetchData(fmt.Sprintf("https://crt.sh/?q=%s&output=json", sanitizedDomain))
553+
if *resolve {
554+
printResults(extractSubdomains(subdomains))
555+
} else {
556+
printData(subdomains)
557+
}
558+
os.Exit(1)
559+
}
560+
if *source == "db" {
561+
sanitizedDomain := sanitizedInput(*domain)
562+
queryDatabase(sanitizedDomain)
563+
os.Exit(1)
564+
}
565+
if (*source != "net" || *source != "db") {
566+
r.Printf("\ninvalid source [db|all]\n\n")
567+
fmt.Println(utilDescription)
568+
newSet.PrintDefaults()
569+
os.Exit(1)
523570
}
524571
}

0 commit comments

Comments
 (0)