Skip to main content

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 / elite by comparing your direct IP against what the proxy forwards, and by inspecting Via, X-Forwarded-For and 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.

Release files for proxyprobe 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for proxyprobe 0.1.1
File Size Uploaded
proxyprobe-0.1.1.tar.gz 9.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for proxyprobe 0.1.1
File Interpreter ABI Platform
proxyprobe-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.2 kB

Release files / proxyprobe-0.1.1.tar.gz

Download URL proxyprobe-0.1.1.tar.gz
Size 9.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1e427a9af6f5f0e30bc0dd70537211aa72112d3801f4740fc15b3e5a49437010
BLAKE2b-256 checksum
How to use checksums
f9287b8973153929b8091b55d41824ba2fa585a418b40b0f815ca6d1388e1767
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / proxyprobe-0.1.1-py3-none-any.whl

Download URL proxyprobe-0.1.1-py3-none-any.whl
Size 8.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6277c62ea92d289a6ff5245a6b8748844cf3ae58f99658f982387161f8132c9d
BLAKE2b-256 checksum
How to use checksums
3725921028282c0cb9d677a52537d4e6f3206f837986f09a67445f91f1a66a0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page