你改的代码编译错误如下:# command-line-argumentsmaingo2211 undefined headersFlagmaingo2711 undefined waitGroupWrappermaingo613 undefined showBannermaingo742 undefined showBannermaingo1015 undefined isStdinmaingo1
根据编译错误提示,headersFlag和waitGroupWrapper等变量未定义。因此,需要在代码中定义这些变量。以下是完整的修改后的代码:
package main
import ( "bufio" "flag" "fmt" "math/rand" "os" "strconv" "strings" "time"
"github.com/logrusorgru/aurora/v3"
log "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/gologger/levels"
)
type headersFlag []string
func (h *headersFlag) String() string { return strings.Join(*h, ", ") }
func (h *headersFlag) Set(value string) error { *h = append(*h, value) return nil }
type waitGroupWrapper struct { wg sync.WaitGroup }
func (w *waitGroupWrapper) Add(delta int) { w.wg.Add(delta) }
func (w *waitGroupWrapper) Done() { w.wg.Done() }
func (w *waitGroupWrapper) Wait() { w.wg.Wait() }
var ( query string engine string page int headers headersFlag proxy string silent bool queries []string proxies []string wg waitGroupWrapper )
func init() { flag.StringVar(&query, "q", "", "") flag.StringVar(&query, "query", "", "")
flag.StringVar(&engine, "e", "", "")
flag.StringVar(&engine, "engine", "google", "")
flag.IntVar(&page, "p", 1, "")
flag.IntVar(&page, "page", 1, "")
flag.Var(&headers, "header", "")
flag.Var(&headers, "H", "")
flag.StringVar(&proxy, "x", "", "")
flag.StringVar(&proxy, "proxy", "", "")
flag.BoolVar(&silent, "s", false, "")
flag.BoolVar(&silent, "silent", false, "")
flag.Usage = func() {
h := []string{
"Options:",
" -q, --query <query> Search query",
" -e, --engine <engine> Provide search engine (default: Google)",
" (options: Google, Shodan, Bing, Duck, Yahoo, Ask)",
" -p, --page <i> Specify number of pages (default: 1)",
" -H, --header <header> Pass custom header to search engine",
" -x, --proxy <proxy_url> Use proxy to surfing (HTTP/SOCKSv5 proxy)",
" -s, --silent Silent mode",
"\n",
}
showBanner()
fmt.Fprintf(os.Stderr, "%s", aurora.Green(strings.Join(h, "\n")))
}
flag.Parse()
engine = strings.ToLower(engine)
maxLog := levels.LevelDebug
if silent {
maxLog = levels.LevelSilent
}
log.DefaultLogger.SetMaxLevel(maxLog)
showBanner()
if proxy != "" {
// Load proxies from file
file, err := os.Open(proxy)
if err != nil {
log.Fatal().Msgf("Failed to open proxy file: %s", err)
os.Exit(1)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
p := scanner.Text()
if strings.TrimSpace(p) != "" {
proxies = append(proxies, p)
}
}
if len(proxies) == 0 {
log.Fatal().Msg("No proxies found in file")
os.Exit(1)
}
}
}
func main() { if isStdin() { sc := bufio.NewScanner(os.Stdin) for sc.Scan() { q := sc.Text() queries = append(queries, q) } } else { if query == "" { log.Fatal().Msgf("Missing required -q flag!") os.Exit(2) }
queries = []string{query}
}
log.Info().Msgf("Query : %+v", queries)
log.Info().Msgf("Page : %s", strconv.Itoa(page))
if proxy != "" {
log.Info().Msgf("Proxy : %s", proxy)
}
if len(headers) > 0 {
log.Info().Msgf("Header: [%+v]", headers)
}
log.Info().Msgf("Engine: %s", strings.Title(engine))
log.Warning().Msg("Use at your own risk! Developers assume no responsibility...")
log.Warning().Msg("If your IP address has been blocked by search engine providers or other reason.\n\n")
// Randomize the proxy list
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(proxies), func(i, j int) { proxies[i], proxies[j] = proxies[j], proxies[i] })
for _, q := range queries {
wg.Add(1)
go func(dork string) {
defer wg.Done()
opts := options{
Query: dork,
Engine: engine,
Page: page,
Proxy: getRandomProxy(),
Headers: headers,
}
fatal, err := opts.search()
if err != nil {
if fatal {
isError(err)
}
log.Warning().Msgf("Something error %s.", err.Error())
}
}(q)
}
wg.Wait()
}
// getRandomProxy returns a random proxy from the list of proxies func getRandomProxy() string { if len(proxies) == 0 { return "" } return proxies[rand.Intn(len(proxies))]
原文地址: https://www.cveoy.top/t/topic/flOk 著作权归作者所有。请勿转载和采集!