prox5/mystery_dialer.go

39 lines
988 B
Go
Raw Normal View History

package pxndscvm
import (
2021-09-14 01:50:39 +00:00
"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
2021-09-24 16:38:57 +00:00
var socksString string
var conn net.Conn
// pull down proxies from channel until we get a proxy good enough for our spoiled asses
2021-09-24 16:38:57 +00:00
for {
if err := ctx.Err(); err != nil {
return nil, err
}
sock = s.GetAnySOCKS()
2021-09-24 16:38:57 +00:00
s.dbgPrint("dialer trying: " + sock.Endpoint + "...")
var err error
socksString = fmt.Sprintf("socks%s://%s?timeout=%ss", sock.GetProto(), sock.Endpoint, s.GetTimeoutSecondsStr())
2021-09-24 16:38:57 +00:00
dialSocks := socks.Dial(socksString)
if conn, err = dialSocks(network, addr); err != nil {
s.dbgPrint(ylw + "unable to reach [redacted] with " + socksString + ", cycling..." + rst)
2021-09-24 16:38:57 +00:00
continue
}
break
}
2021-09-24 19:07:56 +00:00
s.dbgPrint(grn + "MysteryDialer using socks: " + socksString + rst)
return conn, nil
}