package pxndscvm import ( "context" "fmt" "net" "h12.io/socks" ) // MysteryDialer is a dialer function that will use a different proxy for every request. func (s *Swamp) MysteryDialer(ctx context.Context, network, addr string) (net.Conn, error) { var sock Proxy var socksString string var conn net.Conn // pull down proxies from channel until we get a proxy good enough for our spoiled asses for { if err := ctx.Err(); err != nil { return nil, err } sock = s.GetAnySOCKS() s.dbgPrint("dialer trying: " + sock.Endpoint + "...") var err error socksString = fmt.Sprintf("socks%s://%s?timeout=%ss", sock.GetProto(), sock.Endpoint, s.GetTimeoutSecondsStr()) dialSocks := socks.Dial(socksString) if conn, err = dialSocks(network, addr); err != nil { s.dbgPrint(ylw + "unable to reach [redacted] with " + socksString + ", cycling..." + rst) continue } break } s.dbgPrint(grn + "MysteryDialer using socks: " + socksString + rst) return conn, nil }