Notably it features interface compatible dialer functions that dial out from different proxies for every connection, and a SOCKS5 server that utilizes those functions.
#### *You very well may end up causing denial of service when using this library with certain tools.*
It is fairly easy to end up with a `slowloris` type effect with this library when paired with efficient tools that try to reuse http connections or that tend to use keepalive. Because the tool has no idea what the proxy server is doing (dialing with different connections often) you may end up leaving a ton of open connections from a website to the proxy servers. This is either a bug or a feature... That much is for you to decide.
The validation has an optional auto scale feature that allows for the automatic tuning of validation worker count as more proxies are dispensed.
This feature is still new, but seems to work well. It can be enabled with `[...].EnableAutoScaler()`.
Please refer to the autoscale related items within [the documentation](https://pkg.go.dev/git.tcp.direct/kayos/prox5) for more info.
### Rate Limiting
Using [Rate5](https://github.com/yunginnanet/Rate5), prox5 naturally reduces the frequency of proxies that fail to validate. It does this by reducing the frequency proxies are accepted into the validation pipeline the more they fail to verify or fail to successfully connect to an endpoint. This is not yet adjustable, but will be soon. See [the documentation for Rate5](https://pkg.go.dev/git.tcp.direct/kayos/rate5), and the source code for this project (defs.go is a good place to start) for more info.
### Accessing Validated Proxies
- Retrieve validated 4/4a/5 proxies as simple strings for generic use
- Use one of the dialer functions with any golang code that calls for a net.Dialer
- Spin up a SOCKS5 server that will then make rotating use of your validated proxies
What makes Prox5 special is largely the Mystery Dialer. This dialer satisfies the net.Dialer and ContextDialer interfaces. The implementation is a little bit different from your average dialer. Here's roughly what happens when you dial out with a ProxyEngine;
Take a look at [mullsox](https://git.tcp.direct/kayos/mullsox) for an easy way to access all of the mullvad proxies reachable from any one VPN endpoint. It is trivial to feed the results of `GetAndVerifySOCKS` into prox5.
Here's a snippet that should just about get you there:
The way you choose to use this lib is yours. The API is fairly extensive for you to be able to customize runtime configuration without having to do any surgery.