yellow~ opinionated web scanning pipeline for pentesters in a hurry |
| git clone https://github.com/djnnvx/yellow.git |
| log | files | refs | archive | README | LICENSE |
subfinder.go (1485B)
1 package osint 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "io" 8 "log" 9 "os" 10 11 "evil.djnn.sh/djnn/yellow/core" 12 "github.com/projectdiscovery/subfinder/v2/pkg/runner" 13 ) 14 15 type Subfinder struct{} 16 17 func (*Subfinder) Name() string { return "subfinder" } 18 19 func (*Subfinder) Run(ctx *core.Context) error { 20 fmt.Println("[+] Running subfinder on", ctx.Domain) 21 if ctx.DryRun { 22 return nil 23 } 24 25 outfile := fmt.Sprintf("%s/subfinder.txt", ctx.ScanPath) 26 27 subfinderOpts := &runner.Options{ 28 Threads: 10, // number of threads to use for active enumerations 29 Timeout: 15, // seconds to wait for sources to respond 30 MaxEnumerationTime: 3, // max minutes to wait for enumeration 31 } 32 33 log.SetFlags(0) 34 35 subfinder, err := runner.NewRunner(subfinderOpts) 36 if err != nil { 37 fmt.Printf("[!] Subfinder: failed to create runner: %v\n", err) 38 return nil 39 } 40 41 output := &bytes.Buffer{} 42 _, err = subfinder.EnumerateSingleDomainWithCtx(context.Background(), ctx.Domain, []io.Writer{output}) 43 if err != nil { 44 fmt.Printf("[!] Subfinder: failed to enumerate %s: %v\n", ctx.Domain, err) 45 return nil 46 } 47 48 fo, err := os.Create(outfile) 49 if err != nil { 50 fmt.Printf("[!] Subfinder: failed to create %s: %v\n", outfile, err) 51 return nil 52 } 53 defer fo.Close() 54 55 if _, err := fo.Write(output.Bytes()); err != nil { 56 fmt.Printf("[!] Subfinder: failed to write %s: %v\n", outfile, err) 57 return nil 58 } 59 60 fmt.Printf("[OSINT %s] Subfinder are stored in %s\n\n", ctx.Domain, outfile) 61 return nil 62 }