repo_description: Fast passive subdomain enumeration tool.
repo_topics: bugbounty hacking hacktoberfest osint reconnaissance subdomain-enumeration subdomains
code: package runner
  
  import (
  	"net"
  	"strings"
  
  	"github.com/projectdiscovery/dnsx/libs/dnsx"
  	"github.com/projectdiscovery/subfinder/v2/pkg/passive"
  	"github.com/projectdiscovery/subfinder/v2/pkg/resolve"
  )
  
  // initializePassiveEngine creates the passive engine and loads sources etc
  func (r *Runner) initializePassiveEngine() {
  	r.passiveAgent = passive.New(r.options.Sources, r.options.ExcludeSources, r.options.All, r.options.OnlyRecursive)
  }
  
  // initializeResolver creates the resolver used to resolve the found subdomains
  func (r *Runner) initializeResolver() error {
  	var resolvers []string
  
  	// If the file has been provided, read resolvers from the file
  	if r.options.ResolverList != "" {
  		var err error
  		resolvers, err = loadFromFile(r.options.ResolverList)
  		if err != nil {
  			return err
  		}
  	}
  
  	if len(r.options.Resolvers) > 0 {
  		resolvers = append(resolvers, r.options.Resolvers...)
  	} else {
  		resolvers = append(resolvers, resolve.DefaultResolvers...)
  	}
  
  	// Add default 53 UDP port if missing
  	for i, resolver := range resolvers {
  		if !strings.Contains(resolver, ":") {
  			resolvers[i] = net.JoinHostPort(resolver, "53")
  		}
  	}
  
  	r.resolverClient = resolve.New()
  	var err error
  	r.resolverClient.DNSClient, err = dnsx.New(dnsx.Options{BaseResolvers: resolvers, MaxRetries: 5})
  	if err != nil {
  		return nil
  	}
  
  	return nil
  }
  