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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxyprobe-0.1.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proxyprobe-0.1.1-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

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

Hashes for proxyprobe-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1e427a9af6f5f0e30bc0dd70537211aa72112d3801f4740fc15b3e5a49437010
MD5 1498a45e58ebc6b34ceb17cb26833167
BLAKE2b-256 f9287b8973153929b8091b55d41824ba2fa585a418b40b0f815ca6d1388e1767

See more details on using hashes here.

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

Hashes for proxyprobe-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6277c62ea92d289a6ff5245a6b8748844cf3ae58f99658f982387161f8132c9d
MD5 f43d8cc0caa925716f79da85f0817fa2
BLAKE2b-256 3725921028282c0cb9d677a52537d4e6f3206f837986f09a67445f91f1a66a0d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page