Synthient have add a UAM ("Just a moment...") Cloudflare Challenge so the script DON'T WORK anymore. You can pass the UAM Challenge by Famous solver like https://nslsolver.com/ or https://www.capsolver.com/. You can always use the script for IP Intell on other than Synthient.
Hammer your proxy. Know your IPs.
Load-test any HTTP/SOCKS5 proxy pool and get live multi-source intel on every exit IP — risk score, network type, rDNS, ASN, Tor/VPN/abuse flags, and more.
Exit IP Risk Net Country ISP Proxy? IPQS Abuse
─────────────────────────────────────────────────────────────────────────────────────────
103.149.x.x 12 RESIDENTIAL TH True Internet no 5 0
185.220.x.x 87 DATACENTER DE Frantech YES 100 100
178.69.x.x 88 RESIDENTIAL RU Rostelecom YES 72 43
By ImAnonFR
1. Install
pip install -r requirements.txt2. Fill proxies.txt — these are the proxies the Synthient intel API uses to rotate its own source IP and stay under rate limits. They are not the proxies being tested.
http://user:pass@eu-1.yourprovider.com:8080
http://user:pass@us-1.yourprovider.com:8080
socks5://user:pass@gate.yourprovider.com:1080
Terminal 1 — Start the Synthient intel API
uvicorn synthient.api:app --host 0.0.0.0 --port 8000The API reads proxies.txt on startup and uses them to enrich exit IPs in the background. Leave this running.
Terminal 2 — Run the bench against your target proxy
python bench_proxy.py --proxy http://user:pass@gate.yourprovider.com:8080--proxy is the proxy pool you want to test (a single gateway, rotating proxy endpoint, or SOCKS5 tunnel). ProxyScope hammers it with requests, collects every unique exit IP, and enriches each one via the intel API.
Results are saved to a JSON file automatically.
Beyond Synthient, ProxyScope can enrich each exit IP with up to 4 more sources.
All are opt-in — copy .env.example to .env and fill in only the keys you have:
cp .env.example .env
# edit .env — any missing key is silently skipped| Provider | Env var(s) | Extra fields you get |
|---|---|---|
| AbuseIPDB | ABUSEIPDB_API_KEY |
abuse score, is_tor, rDNS hostnames, distinct reporters, last report date |
| IP-API Pro | IPAPI_API_KEY |
proxy/hosting flag, ASN name, rDNS, org, continent, lat/lon |
| IPQualityScore | IPQS_API_KEY |
fraud score, VPN/Tor/bot flags |
| Scamalytics | SCAMALYTICS_USERNAME + SCAMALYTICS_API_KEY |
fraud risk score + label |
When providers are active, extra columns appear in the live table and the JSON output gains a structured verdict + sources block per IP:
"verdict": {
"risk_score": 91,
"is_proxy": true,
"confidence": "confirmed",
"flags": ["residential_proxy", "tor", "vpn"],
"rdns": "berlin01.tor-exit.artikel10.org",
"asn": "TORSERVERS-NET",
"continent": "Europe"
},
"sources": {
"abuseipdb": { "score": 100, "is_tor": true, "distinct_reporters": 85 },
"ipqs": { "score": 100, "vpn": true, "tor": true },
"ipapi": { "proxy": true, "asn": "TORSERVERS-NET", "rdns": "berlin01.tor-exit..." }
}You can find a lot of things with a good GitHub search 😉
# More concurrency + longer test
python bench_proxy.py \
--proxy http://user:pass@gateway.com:8080 \
--max-workers 100 \
--sustained-duration 120
# Match --intel-workers to the number of proxies in proxies.txt
python bench_proxy.py \
--proxy http://user:pass@gateway.com:8080 \
--intel-workers 100
# No intel (no API needed)
python bench_proxy.py --proxy http://user:pass@gateway.com:8080 --no-intel
# Save results to a specific file
python bench_proxy.py --proxy ... --output my_audit.json| Flag | Default | What it does |
|---|---|---|
--proxy |
— | Your proxy URL (HTTP or SOCKS5) |
--max-workers |
40 |
Concurrent requests |
--sustained-duration |
30 |
How long to run the sustained test (seconds) |
--intel-workers |
50 |
Parallel IP lookups — set to your proxies.txt count |
--no-intel |
— | Skip all enrichment |
--output |
auto | JSON output file (bench_YYYYMMDD_HHMMSS.json) |
The intel API (synthient/) looks up each exit IP via Synthient. It uses proxies.txt to rotate source IPs and stay under rate limits.
More proxies = more throughput. With 100 proxies you get ~100 lookups/s.
All optional providers (AbuseIPDB, IPQS, etc.) are queried in parallel with Synthient — total time per IP = slowest provider, not the sum.
# Higher concurrency on Linux/WSL
SYNTHIENT_THREAD_LIMIT=500 uvicorn synthient.api:app \
--host 0.0.0.0 --port 8000 --loop uvloopCheck pool health:
curl http://localhost:8000/pool
curl http://localhost:8000/iplookup/8.8.8.8?summary=trueA live dashboard during the run:
╭──────────────────────── Live Stats ────────────────────────────╮
│ Requests 847/940 90.1% 15.2 req/s avg 412ms p95 980ms │
│ Unique IPs 73 intel pending: 4 │
│ Extra: AbuseIPDB, IP-API, IPQS, Scamalytics active │
╰────────────────────────────────────────────────────────────────╯
A final enriched table per exit IP, then a JSON file with the full breakdown:
{
"pool_quality": {
"avg_risk_weighted": 84.2,
"proxy_confidence": { "confirmed": 312, "likely": 980, "possible": 14, "clean": 2 },
"top_flags": { "residential_proxy": 1290, "mobile_proxy": 340, "tor": 12 },
"network_breakdown": { "RESIDENTIAL": 1280, "DATACENTER": 42 }
}
}Confidence levels:
confirmed— Synthient + at least one other provider agreelikely— Synthient alone flags itpossible— only optional providers flag itclean— no provider detected a proxy
- Python ≥ 3.12
- Any HTTP or SOCKS5 proxy endpoint
Node.js ≥ 18 is optional — only needed if you want the gate bearer token (off by default).
- This project is for educational and research purposes only
- The author is not responsible for any misuse of this tool
- Synthient is a third-party service — respect their rate limits and terms of service
- Only check proxies you own or have explicit permission to test
Discord: imanonfr