Guest User

Untitled

a guest
Nov 27th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 5.59 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "net/http"
  7.     "net/url"
  8.     "os"
  9.     "strings"
  10.     "sync"
  11.     "time"
  12. )
  13.  
  14. // Colori per l'output del terminale
  15. const (
  16.     ColorReset  = "\033[0m"
  17.     ColorGreen  = "\033[32m"
  18.     ColorRed    = "\033[31m"
  19.     ColorYellow = "\033[33m"
  20.     ColorBlue   = "\033[34m"
  21.     ColorCyan   = "\033[36m"
  22. )
  23.  
  24. // Variabili globali per la configurazione
  25. var (
  26.     threads      int
  27.     credsFile    string
  28.     proxyFile    string
  29.     loginURL     = "https://i.instagram.com/api/v1/accounts/login/"
  30.     validProxies []string
  31. )
  32.  
  33. // Carica le credenziali dal file
  34. func loadCredentials(filePath string) [][]string {
  35.     file, err := os.Open(filePath)
  36.     if err != nil {
  37.         fmt.Printf("%sErrore: Impossibile aprire il file delle credenziali: %s%s\n", ColorRed, filePath, ColorReset)
  38.         os.Exit(1)
  39.     }
  40.     defer file.Close()
  41.  
  42.     var credentials [][]string
  43.     scanner := bufio.NewScanner(file)
  44.     for scanner.Scan() {
  45.         line := strings.TrimSpace(scanner.Text())
  46.         if strings.Contains(line, ":") {
  47.             credentials = append(credentials, strings.SplitN(line, ":", 2))
  48.         }
  49.     }
  50.     if err := scanner.Err(); err != nil {
  51.         fmt.Printf("%sErrore durante la lettura del file delle credenziali: %v%s\n", ColorRed, err, ColorReset)
  52.     }
  53.     return credentials
  54. }
  55.  
  56. // Carica i proxy dal file
  57. func loadProxies(filePath string) []string {
  58.     file, err := os.Open(filePath)
  59.     if err != nil {
  60.         fmt.Printf("%sErrore: Impossibile aprire il file dei proxy: %s%s\n", ColorRed, filePath, ColorReset)
  61.         os.Exit(1)
  62.     }
  63.     defer file.Close()
  64.  
  65.     var proxies []string
  66.     scanner := bufio.NewScanner(file)
  67.     for scanner.Scan() {
  68.         proxy := strings.TrimSpace(scanner.Text())
  69.         if proxy != "" {
  70.             proxies = append(proxies, proxy)
  71.         }
  72.     }
  73.     if err := scanner.Err(); err != nil {
  74.         fmt.Printf("%sErrore durante la lettura del file dei proxy: %v%s\n", ColorRed, err, ColorReset)
  75.     }
  76.     return proxies
  77. }
  78.  
  79. // Verifica se un proxy è valido
  80. func checkProxy(proxy string) bool {
  81.     proxyURL, err := url.Parse(proxy)
  82.     if err != nil {
  83.         fmt.Printf("%sFormato proxy non valido: %s%s\n", ColorRed, proxy, ColorReset)
  84.         return false
  85.     }
  86.  
  87.     transport := &http.Transport{
  88.         Proxy: http.ProxyURL(proxyURL),
  89.     }
  90.     client := &http.Client{
  91.         Transport: transport,
  92.         Timeout:   5 * time.Second,
  93.     }
  94.  
  95.     testURL := "https://httpbin.org/ip"
  96.     resp, err := client.Get(testURL)
  97.     if err != nil {
  98.         fmt.Printf("%sProxy fallito: %s (%v)%s\n", ColorRed, proxy, err, ColorReset)
  99.         return false
  100.     }
  101.     defer resp.Body.Close()
  102.  
  103.     if resp.StatusCode == http.StatusOK {
  104.         fmt.Printf("%sProxy valido: %s%s\n", ColorGreen, proxy, ColorReset)
  105.         return true
  106.     }
  107.  
  108.     fmt.Printf("%sProxy restituisce stato inatteso: %s (HTTP %d)%s\n", ColorYellow, proxy, resp.StatusCode, ColorReset)
  109.     return false
  110. }
  111.  
  112. // Valida tutti i proxy in parallelo
  113. func validateProxies(proxies []string, threads int) []string {
  114.     var valid []string
  115.     var wg sync.WaitGroup
  116.     proxyChan := make(chan string, len(proxies))
  117.     validChan := make(chan string, len(proxies))
  118.  
  119.     for _, proxy := range proxies {
  120.         proxyChan <- proxy
  121.     }
  122.     close(proxyChan)
  123.  
  124.     for i := 0; i < threads; i++ {
  125.         wg.Add(1)
  126.         go func() {
  127.             defer wg.Done()
  128.             for proxy := range proxyChan {
  129.                 if checkProxy(proxy) {
  130.                     validChan <- proxy
  131.                 }
  132.             }
  133.         }()
  134.     }
  135.  
  136.     wg.Wait()
  137.     close(validChan)
  138.  
  139.     for proxy := range validChan {
  140.         valid = append(valid, proxy)
  141.     }
  142.     return valid
  143. }
  144.  
  145. // Esegue il login (funzione simulata, implementare interazione API qui)
  146. func processLogin(email, password, proxy string) {
  147.     fmt.Printf("%s[INFO]%s Elaborazione login per: %s%s\n", ColorBlue, ColorReset, email, ColorReset)
  148.     // Aggiungi qui la logica di login (risposta simulata per ora)
  149.     fmt.Printf("%s[OK]%s Accesso effettuato: %s%s\n", ColorGreen, ColorReset, email, ColorReset)
  150. }
  151.  
  152. // Worker per processare credenziali con proxy
  153. func worker(credsChan chan []string, proxiesChan chan string, wg *sync.WaitGroup) {
  154.     defer wg.Done()
  155.     for creds := range credsChan {
  156.         email, password := creds[0], creds[1]
  157.         proxy := <-proxiesChan
  158.         processLogin(email, password, proxy)
  159.         proxiesChan <- proxy
  160.     }
  161. }
  162.  
  163. func main() {
  164.     // Configurazione input
  165.     fmt.Printf("%sInserisci il percorso del file delle credenziali: %s", ColorCyan, ColorReset)
  166.     fmt.Scanln(&credsFile)
  167.  
  168.     fmt.Printf("%sInserisci il percorso del file dei proxy: %s", ColorCyan, ColorReset)
  169.     fmt.Scanln(&proxyFile)
  170.  
  171.     fmt.Printf("%sInserisci il numero di thread: %s", ColorCyan, ColorReset)
  172.     fmt.Scanln(&threads)
  173.  
  174.     // Carica credenziali e proxy
  175.     credentials := loadCredentials(credsFile)
  176.     proxies := loadProxies(proxyFile)
  177.  
  178.     if len(credentials) == 0 {
  179.         fmt.Printf("%sNessuna credenziale trovata. Esco.%s\n", ColorRed, ColorReset)
  180.         return
  181.     }
  182.     if len(proxies) == 0 {
  183.         fmt.Printf("%sNessun proxy trovato. Esco.%s\n", ColorRed, ColorReset)
  184.         return
  185.     }
  186.  
  187.     // Valida i proxy
  188.     fmt.Printf("%sValidazione dei proxy in corso...%s\n", ColorYellow, ColorReset)
  189.     validProxies = validateProxies(proxies, threads)
  190.  
  191.     if len(validProxies) == 0 {
  192.         fmt.Printf("%sNessun proxy valido trovato. Esco.%s\n", ColorRed, ColorReset)
  193.         return
  194.     }
  195.  
  196.     // Crea canali per credenziali e proxy
  197.     credsChan := make(chan []string, len(credentials))
  198.     proxiesChan := make(chan string, len(validProxies))
  199.  
  200.     for _, creds := range credentials {
  201.         credsChan <- creds
  202.     }
  203.     close(credsChan)
  204.  
  205.     for _, proxy := range validProxies {
  206.         proxiesChan <- proxy
  207.     }
  208.  
  209.     // Processa credenziali con proxy
  210.     var wg sync.WaitGroup
  211.     fmt.Printf("%sInizio processo di login...%s\n", ColorBlue, ColorReset)
  212.     for i := 0; i < threads; i++ {
  213.         wg.Add(1)
  214.         go worker(credsChan, proxiesChan, &wg)
  215.     }
  216.  
  217.     wg.Wait()
  218.     fmt.Printf("%sProcesso completato.%s\n", ColorGreen, ColorReset)
  219. }
Advertisement
Add Comment
Please, Sign In to add comment