proxyprobe
Check a list of proxies for liveness, latency, exit IP and anonymity — one file, one dependency.
$ proxyprobe proxies.txt --geo
PROXY OK MS EXIT IP ANONYMITY LOCATION ERROR
--------------------------------- --- ---- --------------- ----------- -------------- ---------------------
http://user:***@gw.example.com:80 yes 312 203.0.113.44 elite Tokyo Japan
socks5://198.51.100.7:1080 yes 1180 198.51.100.7 transparent Frankfurt Germany
http://10.0.0.9:3128 no - - - ConnectTimeout: timed out
2/3 working | 312ms median | 1 elite, 1 transparent
Most "proxy checker" scripts only tell you whether a connection opened. That is the least interesting thing about a proxy. proxyprobe also answers the questions that actually decide whether a proxy is usable:
- Does it leak my real IP? Graded
transparent/anonymous/eliteby comparing your direct IP against what the proxy forwards, and by inspectingVia,X-Forwarded-Forand friends. - Where does it actually exit? The advertised location and the real one often differ.
- How slow is it really? Measured on a full request, not a TCP handshake.
Install
pip install "httpx[socks]"
curl -O https://raw.githubusercontent.com/roamproxy/proxyprobe/main/proxyprobe.py
python proxyprobe.py proxies.txt
It is a single file with no packaging required. Drop it in a repo, a container, or a CI job and run it.
Usage
proxyprobe proxies.txt # table output
proxyprobe proxies.txt --json # machine readable
proxyprobe proxies.txt --geo # add country/city
proxyprobe proxies.txt --working-only # drop the dead ones
cat proxies.txt | proxyprobe - # read stdin
proxyprobe proxies.txt -c 100 -t 5 # 100 in parallel, 5s timeout
Proxy list format — one per line, # comments and blank lines ignored:
http://user:pass@host:8080
socks5://host:1080
host:8080 # scheme defaults to http
Options
| Flag | Description |
|---|---|
-c, --concurrency |
Parallel checks (default 20) |
-t, --timeout |
Per-request timeout in seconds (default 10) |
--json |
JSON instead of a table |
--geo |
Look up country/city (rate limited, so opt-in) |
--working-only |
Only output proxies that responded |
--echo-url |
IP echo endpoint (default api.ipify.org) |
--headers-url |
Header echo endpoint used for anonymity grading |
--geo-url |
Geo lookup template, must contain {ip} |
-q, --quiet |
Suppress the progress counter |
Exit code is 0 if at least one proxy worked, 1 if none did — so it drops straight
into CI or a shell pipeline:
proxyprobe proxies.txt --working-only --json > alive.json || echo "all proxies down"
Anonymity grades
| Grade | Meaning |
|---|---|
elite |
Request looks like an ordinary direct request |
anonymous |
Real IP hidden, but headers announce a proxy is in use |
transparent |
Your real IP is visible through the proxy |
Grading needs a baseline, so proxyprobe first fetches your direct IP once. If that
fails it degrades safely: a proxy is never labelled transparent without a baseline
to compare against.
Passwords are masked
Credentials are stripped from every output path, so results are safe to paste into an issue or a CI log:
http://user:hunter2@host:80 -> http://user:***@host:80
Passwords containing @ and : are handled correctly.
Privacy
By default proxyprobe talks to api.ipify.org (IP echo), httpbin.org (header echo)
and, only with --geo, ip-api.com. All three are overridable — point them at your
own endpoints if you would rather not route a proxy list through third parties:
proxyprobe proxies.txt --echo-url https://your-host/ip --headers-url https://your-host/headers
Nothing else is sent anywhere. There is no telemetry.
Development
pip install "httpx[socks]" pytest
pytest -q
License
MIT — see LICENSE.
Maintained by Roam, a residential and datacenter proxy provider. proxyprobe works with any proxy from any provider, and always will — we built it because we needed it ourselves.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file proxyprobe-0.1.1.tar.gz.
File metadata
- Download URL: proxyprobe-0.1.1.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e427a9af6f5f0e30bc0dd70537211aa72112d3801f4740fc15b3e5a49437010
|
|
| MD5 |
1498a45e58ebc6b34ceb17cb26833167
|
|
| BLAKE2b-256 |
f9287b8973153929b8091b55d41824ba2fa585a418b40b0f815ca6d1388e1767
|
File details
Details for the file proxyprobe-0.1.1-py3-none-any.whl.
File metadata
- Download URL: proxyprobe-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6277c62ea92d289a6ff5245a6b8748844cf3ae58f99658f982387161f8132c9d
|
|
| MD5 |
f43d8cc0caa925716f79da85f0817fa2
|
|
| BLAKE2b-256 |
3725921028282c0cb9d677a52537d4e6f3206f837986f09a67445f91f1a66a0d
|