@@ -43,11 +43,13 @@ var (
43
43
r = color .New (color .FgHiRed )
44
44
writer = new (tabwriter.Writer )
45
45
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]"
51
53
myClient = & http.Client {Timeout : 10 * time .Second }
52
54
appVersion = "1.2.0"
53
55
banner = `
@@ -201,7 +203,7 @@ func sanitizedInput(input string) (sanitizedDomain string) {
201
203
if ! validateDomainName (input ) {
202
204
r .Printf ("\n please supply a valid domain\n \n " )
203
205
fmt .Println (utilDescription )
204
- flag .PrintDefaults ()
206
+ newSet .PrintDefaults ()
205
207
os .Exit (1 )
206
208
}
207
209
sanitizedDomain , _ = publicsuffix .EffectiveTLDPlusOne (input )
@@ -275,7 +277,7 @@ func grabKnownLogs(URL string) *loglist.LogList {
275
277
}
276
278
277
279
// prints a list of all known certificate transparency logs
278
- func printKnownLogs () {
280
+ func storeKnownLogs () {
279
281
writer .Init (os .Stdout , 10 , 8 , 0 , '\t' , tabwriter .AlignRight )
280
282
fmt .Fprintln (writer , "Selection\t Log size\t Status\t Log URL\t " )
281
283
fmt .Fprintln (writer , "---------\t --------\t ------\t -------\t " )
@@ -476,20 +478,44 @@ func readDatabase() {
476
478
database .Close ()
477
479
}
478
480
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
+
479
505
// sets up command-line arguments and default responses
480
506
func setup () {
481
- flag .Usage = func () {
507
+ newSet .Usage = func () {
482
508
g .Printf (banner )
483
509
y .Printf ("\n written & maintained with ♥ by NetEvert\n \n " )
484
510
fmt .Println (utilDescription )
485
- flag .PrintDefaults ()
511
+ newSet .PrintDefaults ()
512
+ os .Exit (1 )
486
513
}
487
-
488
- flag .Parse ()
514
+
515
+ newSet .Parse (os . Args [ 1 :] )
489
516
490
517
if * store {
491
- // downloadCTLogs()
492
- printKnownLogs ()
518
+ storeKnownLogs ()
493
519
os .Exit (1 )
494
520
}
495
521
@@ -506,19 +532,40 @@ func setup() {
506
532
if * domain == "" {
507
533
r .Printf ("\n please supply a domain\n \n " )
508
534
fmt .Println (utilDescription )
509
- flag .PrintDefaults ()
535
+ newSet .PrintDefaults ()
536
+ os .Exit (1 )
537
+ }
538
+
539
+ if * source == "" {
540
+ r .Printf ("\n please supply a source {db|all}\n \n " )
541
+ fmt .Println (utilDescription )
542
+ newSet .PrintDefaults ()
510
543
os .Exit (1 )
511
544
}
512
545
}
513
546
514
547
// main program entry point
515
548
func main () {
516
549
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 ("\n invalid source [db|all]\n \n " )
567
+ fmt .Println (utilDescription )
568
+ newSet .PrintDefaults ()
569
+ os .Exit (1 )
523
570
}
524
571
}
0 commit comments