Sockrates
Every proxy must prove itself.
Sockrates finds open proxies — SOCKS5, SOCKS4 and HTTP/HTTPS — and cross-examines each one until it demonstrates that it reaches the target you actually care about — Telegram included, both MTProto and the Bot API.
It runs in your terminal and as a desktop app. It has no third-party dependencies.
$ sockrates --target telegram-mtproto --out live.txt
📥 collecting from 11 sources…
2,518 unique in 0.6s
🎯 testing against 'telegram-mtproto' (149.154.167.51:443), strict
✅ 115 good out of 2,518 (4.52%) in 24.2s
fastest 0.12s · median 1.82s
9 have been working for over a day (oldest 3d)
💾 live.txt
Why the name
Socrates never accepted a claim at face value, and neither does this. Finding proxies is trivial — public lists hand you thousands in under a second. Keeping the ones that work is the entire problem, and most scrapers get it wrong in two ways:
- They test against the wrong thing. A proxy that loads
example.comtells you nothing about whether it can reach your endpoint. Plenty of open proxies allow port 80 and refuse 443, or block particular networks outright. - They believe the proxy. A SOCKS5 server can answer "connected!" to anything and hand you a socket into the void. Any list built on that is padded with entries that fail the moment you use them.
Sockrates answers both. See How it works for the full method.
| the claim | how Sockrates tests it |
|---|---|
| "I can reach your HTTPS endpoint" | completes the TLS handshake through the proxy and checks the certificate |
| "I can reach Telegram" | performs a real MTProto handshake — req_pq_multi in, valid resPQ back, carrying our nonce |
| "I'm a working proxy" | is also asked to connect somewhere that must fail; anything that reports success there is discarded as a liar |
How much does it matter? On the same 2,547 candidates:
| check | kept |
|---|---|
| TCP connect to a Telegram datacenter "succeeded" | 194 |
| …and Telegram actually answered | 115 |
41% of them were lying. Every result records how it was proven, in verified.
Telegram is not one target
Bot API clients speak HTTPS to api.telegram.org. User clients — Telethon, the mobile apps —
open raw TCP to datacenter IPs and speak MTProto. A proxy can allow one and block the other.
From a single run of one list:
| works for | count |
|---|---|
| Bot API only | 36 |
| MTProto only | 152 |
| both | 42 |
Test for the one you will actually use. Details in Telegram targets.
What it hands you is alive
Free proxies rot within minutes. A list written an hour ago is mostly fiction, so Sockrates never pretends otherwise:
--watch Nre-hunts every N minutes and rewrites your file, reporting how many died since the previous run. What is on disk was verified minutes ago at worst.- In the app, Re-verify before every Save / Copy is on by default: the moment you export or copy, every row is tested again and the dead ones are dropped.
- A track record. No proxy tells you its uptime — there is no such field, and any list
printing one is guessing. Sockrates instead remembers what it has observed: how long it has
known each proxy to work, and how many of its checks it passed. Filter on it with
--min-ageand--min-reliability.
Install
| Debian, Ubuntu, Mint | sudo apt install ./sockrates_0.5.0_all.deb |
| Fedora, RHEL, openSUSE | sudo dnf install ./sockrates-0.5.0-1.noarch.rpm |
| Arch, Manjaro | cd packaging && makepkg -si |
| Anywhere | pipx install sockrates |
| From source | git clone … && python3 sockrates.py --help |
Packages are attached to every release.
Python 3.9 or newer; nothing else to install. The desktop app needs Tkinter, which ships with
Python but some distributions split it out (python3-tk, python3-tkinter, tk) — the
packages list it as recommended, so apt/dnf will offer it.
Updating is one step, whichever way you installed it: run sockrates --update, or press
Update now in the app's update dialog. It runs git pull for a checkout, pipx upgrade /
pip install --upgrade for those, and prints the apt/dnf command for a system package.
Full guide: Installing
Usage
# desktop app
python3 sockrates.py --gui
# Telegram user clients / Telethon (SOCKS5)
python3 sockrates.py --target telegram-mtproto --out mtproto.txt
# every proxy type at once
python3 sockrates.py --type all --target https --out all.txt
# Telegram bots, certificate verified
python3 sockrates.py --target telegram-bot --out bots.txt
# anything else, with an optional certificate check
python3 sockrates.py --target api.example.com:443 --cert-contains example.com
# keep a file permanently true, refreshed every 10 minutes
python3 sockrates.py --target telegram-mtproto --watch 10 --out live.txt
# discover proxies by scanning a range you are allowed to test, then verify them
python3 sockrates.py --scan 203.0.113.0/24 --target telegram-mtproto --out found.txt
# only proxies we have known to work for a day and that passed 80% of our checks
python3 sockrates.py --min-age 24 --min-reliability 80 --format csv --out proven.csv
Full reference: CLI · Desktop app
Export formats
--format takes any of these, and the app offers the same list:
| format | what you get |
|---|---|
plain |
ip:port, one per line |
uri |
socks5://ip:port — curl, requests, ALL_PROXY |
csv |
host, port, latency, country, proof, known-for, reliability |
json |
full records |
proxychains |
a block to paste under [ProxyList] |
python |
a PROXIES = [...] list for PySocks / Telethon |
curl |
ready-made example commands |
Responsible use
These are other people's open proxies, running on machines whose owners usually have no idea. That carries obligations:
- Anything you send unencrypted can be read, logged or modified by the operator. Use TLS end to end, and never send credentials you would mind losing.
- Do not use them to attack, flood, or evade a ban you were given for good reason.
- Whether scanning and using open proxies is lawful depends on where you are. Check.
By default Sockrates only connects to hosts already advertised on public proxy lists. It can
also scan IP ranges you point it at (--scan), to find proxies nobody has published yet —
and that power comes with a rule: only scan ranges you own or are authorised to test. Port
scanning is treated as unauthorised access in some places regardless of intent. The default
rate is gentle and there is no "scan the internet" switch; a /16 is the largest range it
will take in one go.
Support the project
Sockrates is free and always will be. If it saved you an afternoon, a tip is welcome — one address, works on every EVM chain (Ethereum, BSC, Base, Arbitrum, Polygon, …):
0x74E71BB8849FF0e17FA73Fc61DA107032D117dF6
It is in the app too, under About, with a copy button. Starring the repo is free and helps just as much.
License
Apache License 2.0. Permissive — use it commercially, fork it, embed it — with an explicit patent grant, and no rights to the project name. See NOTICE.
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 sockrates-0.5.0.tar.gz.
File metadata
- Download URL: sockrates-0.5.0.tar.gz
- Upload date:
- Size: 43.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c139cd8e747ecb5289b2d3e9789f11659b0e5a8206bde6daae57ed845c1a1827
|
|
| MD5 |
ca906c0ae8cdbf38f3e4c52179d5aae7
|
|
| BLAKE2b-256 |
2df8b60619bfcadc909c81e66d6429d8a7cc045793259fff88846eb6ad08f77d
|
Provenance
The following attestation bundles were made for sockrates-0.5.0.tar.gz:
Publisher:
publish-pypi.yml on SimuZSkyNeT/sockrates
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sockrates-0.5.0.tar.gz -
Subject digest:
c139cd8e747ecb5289b2d3e9789f11659b0e5a8206bde6daae57ed845c1a1827 - Sigstore transparency entry: 2540624450
- Sigstore integration time:
-
Permalink:
SimuZSkyNeT/sockrates@50316e06ac51121897ad7114e1d84f5286eec2db -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/SimuZSkyNeT
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50316e06ac51121897ad7114e1d84f5286eec2db -
Trigger Event:
release
-
Statement type:
File details
Details for the file sockrates-0.5.0-py3-none-any.whl.
File metadata
- Download URL: sockrates-0.5.0-py3-none-any.whl
- Upload date:
- Size: 41.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81ed8143fa659b1c1a04f31eca0b29a4b21ab6cdfd85bb1eed337c93c67a737e
|
|
| MD5 |
28d9a540a36163958d5b4a2039845eb1
|
|
| BLAKE2b-256 |
2fc73dd3352b448395df05f84266257c3720259df64254520adff2fba73568cf
|
Provenance
The following attestation bundles were made for sockrates-0.5.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on SimuZSkyNeT/sockrates
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sockrates-0.5.0-py3-none-any.whl -
Subject digest:
81ed8143fa659b1c1a04f31eca0b29a4b21ab6cdfd85bb1eed337c93c67a737e - Sigstore transparency entry: 2540625316
- Sigstore integration time:
-
Permalink:
SimuZSkyNeT/sockrates@50316e06ac51121897ad7114e1d84f5286eec2db -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/SimuZSkyNeT
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50316e06ac51121897ad7114e1d84f5286eec2db -
Trigger Event:
release
-
Statement type: