Beispiel #1
0
func main() {
	g := gopher.New()
	g.Start() // Start the gopher with default values

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.SetActivity(gopher.Wondering) // Changes the gophers activity

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.SetColor(gopher.Green)

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.SetPrefix("Hey yo!")

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.SetActivity(gopher.Boring)
	g.SetColor(gopher.Yellow) // Changes the gophers color
	g.SetPrefix("")
	g.SetSuffix("Whats up?")

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.SetActivity(gopher.Loving)
	g.SetColor(gopher.Magenta)
	g.SetPrefix(gopher.Loving.String())
	g.SetSuffix("")

	time.Sleep(8 * time.Second) // Run for some time to simulate work

	g.Stop()
}
Beispiel #2
0
func main() {

	g := gopher.New()
	g.Start() // Start the gopher

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.Activity = gopher.Wondering // Changes the gophers activity

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.Color = gopher.Green

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.Prefix = "Hey yo!"

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.Activity = gopher.Boring
	g.Color = gopher.Yellow // Changes the gophers color
	g.Prefix = ""
	g.Suffix = "Whats up?"

	time.Sleep(4 * time.Second) // Run for some time to simulate work

	g.Activity = gopher.Loving
	g.Color = gopher.Magenta
	g.Prefix = g.Activity.String()
	g.Suffix = ""

	time.Sleep(8 * time.Second) // Run for some time to simulate work

	g.Stop()
}
Beispiel #3
0
func main() {
	inputfilename := flag.String("i", "", "File containing new line delimited email addresses")
	ccount := flag.Int("c", 10, "Maximum number of concurrent requests")
	htmlOut := flag.Bool("html", false, "Output HTML (has webcache links)")
	showVersion := flag.Bool("v", false, "Print version and exit")
	flag.Parse()

	if *showVersion {
		fmt.Println(version)
		os.Exit(0)
	}

	emailAddrs := make(map[string]bool)

	if i := len(flag.Args()); i > 0 {
		for j := 0; j < i; j++ {
			emailAddrs[flag.Arg(j)] = true
		}
	}

	if *inputfilename != "" {
		f, err := os.Open(*inputfilename)

		if err != nil {
			fmt.Printf("[!] Error: %s", err.Error())
		}

		scanner := bufio.NewScanner(f)
		for scanner.Scan() {
			emailAddrs[scanner.Text()] = true
		}

		if err := scanner.Err(); err != nil {
			fmt.Printf("[!] Error: %s", err.Error())
		}

		f.Close()
	}

	results := []result{}

	// Mutex to protect writing in Goroutines.
	resultsMutex := sync.Mutex{}
	wg := sync.WaitGroup{}
	work := make(chan string, *ccount)

	g := gopher.New()

	if !*htmlOut {
		g.Start()
		g.SetSuffix(fmt.Sprintf("pwnpaste %v", version))
		g.SetColor(gopher.Green)
	}

	// Start up *ccount goroutine pool to make requests.
	for i := 0; i < *ccount; i++ {
		go func(j int) {
			for email := range work {
				pasteAccounts, _ := hibp.GetPasteAccount(email)
				if len(pasteAccounts) > 0 {
					pasteDatas := []pasteData{}

					for _, p := range pasteAccounts {
						pasteDatas = append(pasteDatas, pasteData{
							ID:             p.ID,
							PasteBinLink:   fmt.Sprintf("https://pastebin.com/raw.php?i=%s", p.ID),
							CachedViewLink: fmt.Sprintf("https://webcache.googleusercontent.com/search?q=cache:https://pastebin.com/%s", p.ID),
						})
					}
					resultsMutex.Lock()
					results = append(results, result{
						Email:  email,
						Pastes: pasteDatas,
					})
					if !*htmlOut {
						if j%2 == 0 {
							g.SetColor(gopher.Magenta)
							g.SetActivity(gopher.Loving)
						} else {
							g.SetColor(gopher.Green)
							g.SetActivity(gopher.Boring)
						}
					}
					resultsMutex.Unlock()
				}
				wg.Done()
			}
		}(i)
	}

	// Send each email to the goroutine pool
	for email := range emailAddrs {
		wg.Add(1)
		work <- email
	}
	close(work)

	wg.Wait()
	g.Stop()

	if *htmlOut {
		outputHTML(results)
	} else {
		outputTable(results)
	}

}