Fast proxy scraper and checker written in Rust. Collects HTTP, SOCKS4 and SOCKS5 proxies from any number of sources, verifies each one really works, and writes JSON and plain text with response time, exit IP, ASN and geolocation. Single binary for Windows, Linux, macOS and Android, with an interactive TUI.
Rust
1,342
2,351 commits
updated Oct 15, 2026
A proxy scraper and checker written in Rust.
It collects HTTP/SOCKS4/SOCKS5 proxies from any number of sources, verifies each one really works, and writes the survivors out with response times, geolocation and network ownership attached.
scheme://user:pass@host:port and CIDR ranges are understood, from URLs or local files.If you want proxies without running anything, monosans/proxy-list is updated regularly using this tool.
Checking opens hundreds of simultaneous connections to untrusted hosts. Your ISP may read that as abusive traffic, and cheap routers can drop connectivity when their NAT table fills. Consider a VPN, and lower max_concurrent_checks if a run destabilizes your network.
Every option is documented inline in config.toml. The binary reads config.toml from the current directory; set PROXY_SCRAPER_CHECKER_CONFIG to point it somewhere else.
Pre-built archives are produced by CI from the latest commit on main and published as the latest release, see Verifying downloads. Open the section for your system.
Download the archive for your processor:
| Processor | Download |
|---|---|
| 64-bit Intel or AMD (almost every PC) | Download |
| ARM64 (Snapdragon and other ARM laptops) | Download |
| 32-bit | Download |
Not sure? Open Settings → System → About and look at "System type": x64-based processor means 64-bit Intel or AMD, ARM-based processor means ARM64, and 32-bit operating system needs the 32-bit build whatever the processor.
Extract the archive to a dedicated folder.
Edit config.toml.
Run proxy-scraper-checker.exe. If SmartScreen shows "Windows protected your PC", click "More info", then "Run anyway".
Download the archive for your processor:
Not sure? Apple menu → About This Mac shows "Chip: Apple M…" on Apple Silicon and "Processor: … Intel …" on Intel.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from Terminal in that folder:
./proxy-scraper-checker
If macOS refuses because it cannot verify the developer, clear the download quarantine and run it again:
xattr -d com.apple.quarantine proxy-scraper-checker
Run uname -m and download the archive from the matching row. The glibc build suits most distributions (Ubuntu, Debian, Fedora, Arch and so on). Each glibc download notes the oldest glibc it runs on (ldd --version prints yours). Take the musl build on Alpine, on an older glibc, or if the glibc build refuses to start.
Several rows share i686, armv7l or armv6l. On i686, take the row without SSE2 only if grep -w sse2 /proc/cpuinfo prints nothing. On armv7l and armv6l, the system has hardware floating point if /lib/ld-linux-armhf.so.3 (glibc), /lib/ld-musl-armhf.so.1 or /lib/ld-musl-armv7.so.1 (musl) exists; otherwise take a row without hardware floating point. The Thumb-2 build also needs neon in /proc/cpuinfo.
| Processor | uname -m | glibc | musl |
|---|---|---|---|
| 64-bit Intel or AMD | x86_64 | Download (2.17+) | Download |
| 64-bit ARM (Raspberry Pi 3 and newer on a 64-bit OS, ARM servers) | aarch64 | Download (2.17+) | Download |
| 32-bit ARMv7 (Raspberry Pi 2 and newer on a 32-bit OS) | armv7l | Download (2.17+) | Download |
| 32-bit ARMv6 (Raspberry Pi 1, Zero, Zero W) | armv6l | Download (2.17+) | Download |
| 32-bit Intel or AMD | i686 | Download (2.17+) | Download |
| 64-bit RISC-V | riscv64 | Download (2.29+) | Download |
| LoongArch | loongarch64 | Download (2.36+) | Download |
| 64-bit PowerPC, little-endian | ppc64le | Download (2.39+) | Download |
| 64-bit PowerPC, big-endian | ppc64 | Download (2.39+) | Download |
| 32-bit PowerPC | ppc | Download (2.39+) | — |
| IBM Z | s390x | Download (2.17+) | — |
| 64-bit SPARC | sparc64 | Download (2.39+) | — |
| 32-bit ARMv5 | armv5tel | Download (2.39+) | Download |
| 32-bit x86 without SSE2 (Pentium III, Athlon XP and older) | i686 | Download (2.17+) | Download |
| 32-bit ARMv7 without hardware floating point | armv7l | Download (2.39+) | Download |
| 32-bit ARMv6 without hardware floating point | armv6l | Download (2.39+) | Download |
| 32-bit ARMv7 with NEON, Thumb-2 build | armv7l | Download (2.39+) | — |
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Install with one command:
bash <(curl -fsSL 'https://raw.githubusercontent.com/monosans/proxy-scraper-checker/main/termux.sh')
Edit the config in a text editor:
nano ~/proxy-scraper-checker/config.toml
Run it:
cd ~/proxy-scraper-checker && ./proxy-scraper-checker
The script picks the right archive by itself. To fetch one by hand, match the output of getprop ro.product.cpu.abi:
Run uname -m and download the archive from the matching row:
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Download the 64-bit x86 archive. It needs NetBSD 10 or newer.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Download the 64-bit x86 archive.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Run uname -p and download the archive from the matching row. It needs Solaris 11.4 or newer.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
The Docker image logs to stdout instead of showing the interactive TUI.
Install Docker Desktop.
Download the archive for your processor:
| Processor | Download |
|---|---|
| 64-bit Intel or AMD (almost every PC) | Download |
| ARM64 (Snapdragon and other ARM laptops) | Download |
Not sure? Open Settings → System → About and look at "System type": x64-based processor means 64-bit Intel or AMD, ARM-based processor means ARM64.
Extract it to a folder and edit config.toml.
Build and run from that folder:
docker compose build
docker compose up --no-log-prefix --remove-orphans
Results land in out inside that folder; output.path is ignored in Docker.
The Docker image logs to stdout instead of showing the interactive TUI.
Install Docker Compose.
Run uname -m and download the archive from the matching row:
| Processor | uname -m | Download |
|---|---|---|
| 64-bit Intel or AMD (including Intel Macs) | x86_64 | Download |
| 64-bit ARM (Apple Silicon Macs, Raspberry Pi on a 64-bit OS) | aarch64, arm64 on macOS | Download |
| 32-bit ARMv7 | armv7l | Download |
| 32-bit Intel or AMD | i686 | Download |
| 64-bit PowerPC, little-endian | ppc64le | Download |
| 64-bit RISC-V | riscv64 | Download |
| IBM Z | s390x | Download |
Extract it to a folder and edit config.toml.
Build and run from that folder. The build arguments make the files in ./out belong to your user:
docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g)
docker compose up --no-log-prefix --remove-orphans
Results land in ./out; output.path is ignored in Docker.
Install the Rust toolchain, see https://rust-lang.org/tools/install/
Clone the repository:
git clone https://github.com/monosans/proxy-scraper-checker.git
cd proxy-scraper-checker
Build a release binary with the TUI enabled:
cargo build --features tui --release --locked
Run with the TUI:
cargo run --features tui --release --locked
The binary lands in target/release/proxy-scraper-checker on Linux/macOS, or target\release\proxy-scraper-checker.exe on Windows.
Every archive is built by GitHub Actions from the public source and published by the CI workflow straight from GitHub's runners, never from someone's computer:
To check a downloaded archive without installing anything:
Get-FileHash <archive> in PowerShell, shasum -a 256 <archive> on macOS, sha256sum <archive> on Linux and Termux, sha256 <archive> on FreeBSD.To check the signature itself, use the GitHub CLI:
gh attestation verify <archive> \
--repo monosans/proxy-scraper-checker \
--signer-workflow monosans/proxy-scraper-checker/.github/workflows/ci.yml
The Docker images are attested the same way, and the prebuilt Docker archives pin the image by digest, so docker compose build uses exactly the image CI built.
out/
├── proxies.json working proxies with metadata, compact
├── proxies_pretty.json the same data, indented
└── proxies/
├── all.txt every proxy, with its protocol prefix
├── http.txt one file per enabled protocol, no prefix
├── socks4.txt
└── socks5.txt
A text line is host:port, or username:password@host:port for a proxy that needs credentials, with protocol:// in front of either in all.txt.
{
"protocol": "socks5",
"username": null,
"password": null,
"host": "1.2.3.4",
"port": 1080,
"timeout": 0.42,
"exit_ip": "5.6.7.8",
"asn": {
"autonomous_system_number": 12345,
"autonomous_system_organization": "Example Networks"
},
"geolocation": {
"country": { "iso_code": "US", "names": { "en": "United States" } },
"city": { "names": { "en": "Chicago" } },
"location": {
"latitude": 41.85,
"longitude": -87.65,
"time_zone": "America/Chicago"
}
}
}
timeout is how long the whole request took, in seconds: connection, request and the complete response. That is also what sort_by_speed orders by. exit_ip is the address the target site actually saw, so comparing it with host spots proxies that forward through somewhere else.
exit_ip, asn and geolocation are only filled in when check_url returns the exit IP, so pointing it at an ordinary web page leaves all three null. geolocation mirrors the GeoLite2 City record (abbreviated above); fields the database has no data for are omitted, and names are English only.
Stopping a run early, with ESC or q in the TUI or Ctrl-C anywhere, writes out everything checked so far. If you stop before any proxy has been checked, the previous run's files are left untouched rather than emptied.
Want your name in this section? Support the project and it goes here.
Star the repository so other people can find it. If you are interested in sponsoring, DM me on Telegram.
This product includes GeoLite2 Data created by MaxMind, available from https://www.maxmind.com
178 followers · starred Aug 2026
27 followers · starred Jan 2022
10 followers · starred Sep 2021
41 followers · starred Nov 2022
Fast proxy scraper and checker written in Rust. Collects HTTP, SOCKS4 and SOCKS5 proxies from any number of sources, verifies each one really works, and writes JSON and plain text with response time, exit IP, ASN and geolocation. Single binary for Windows, Linux, macOS and Android, with an interactive TUI.
Rust
1,342
2,351 commits
updated Oct 15, 2026
A proxy scraper and checker written in Rust.
It collects HTTP/SOCKS4/SOCKS5 proxies from any number of sources, verifies each one really works, and writes the survivors out with response times, geolocation and network ownership attached.
scheme://user:pass@host:port and CIDR ranges are understood, from URLs or local files.If you want proxies without running anything, monosans/proxy-list is updated regularly using this tool.
Checking opens hundreds of simultaneous connections to untrusted hosts. Your ISP may read that as abusive traffic, and cheap routers can drop connectivity when their NAT table fills. Consider a VPN, and lower max_concurrent_checks if a run destabilizes your network.
Every option is documented inline in config.toml. The binary reads config.toml from the current directory; set PROXY_SCRAPER_CHECKER_CONFIG to point it somewhere else.
Pre-built archives are produced by CI from the latest commit on main and published as the latest release, see Verifying downloads. Open the section for your system.
Download the archive for your processor:
| Processor | Download |
|---|---|
| 64-bit Intel or AMD (almost every PC) | Download |
| ARM64 (Snapdragon and other ARM laptops) | Download |
| 32-bit | Download |
Not sure? Open Settings → System → About and look at "System type": x64-based processor means 64-bit Intel or AMD, ARM-based processor means ARM64, and 32-bit operating system needs the 32-bit build whatever the processor.
Extract the archive to a dedicated folder.
Edit config.toml.
Run proxy-scraper-checker.exe. If SmartScreen shows "Windows protected your PC", click "More info", then "Run anyway".
Download the archive for your processor:
Not sure? Apple menu → About This Mac shows "Chip: Apple M…" on Apple Silicon and "Processor: … Intel …" on Intel.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from Terminal in that folder:
./proxy-scraper-checker
If macOS refuses because it cannot verify the developer, clear the download quarantine and run it again:
xattr -d com.apple.quarantine proxy-scraper-checker
Run uname -m and download the archive from the matching row. The glibc build suits most distributions (Ubuntu, Debian, Fedora, Arch and so on). Each glibc download notes the oldest glibc it runs on (ldd --version prints yours). Take the musl build on Alpine, on an older glibc, or if the glibc build refuses to start.
Several rows share i686, armv7l or armv6l. On i686, take the row without SSE2 only if grep -w sse2 /proc/cpuinfo prints nothing. On armv7l and armv6l, the system has hardware floating point if /lib/ld-linux-armhf.so.3 (glibc), /lib/ld-musl-armhf.so.1 or /lib/ld-musl-armv7.so.1 (musl) exists; otherwise take a row without hardware floating point. The Thumb-2 build also needs neon in /proc/cpuinfo.
| Processor | uname -m | glibc | musl |
|---|---|---|---|
| 64-bit Intel or AMD | x86_64 | Download (2.17+) | Download |
| 64-bit ARM (Raspberry Pi 3 and newer on a 64-bit OS, ARM servers) | aarch64 | Download (2.17+) | Download |
| 32-bit ARMv7 (Raspberry Pi 2 and newer on a 32-bit OS) | armv7l | Download (2.17+) | Download |
| 32-bit ARMv6 (Raspberry Pi 1, Zero, Zero W) | armv6l | Download (2.17+) | Download |
| 32-bit Intel or AMD | i686 | Download (2.17+) | Download |
| 64-bit RISC-V | riscv64 | Download (2.29+) | Download |
| LoongArch | loongarch64 | Download (2.36+) | Download |
| 64-bit PowerPC, little-endian | ppc64le | Download (2.39+) | Download |
| 64-bit PowerPC, big-endian | ppc64 | Download (2.39+) | Download |
| 32-bit PowerPC | ppc | Download (2.39+) | — |
| IBM Z | s390x | Download (2.17+) | — |
| 64-bit SPARC | sparc64 | Download (2.39+) | — |
| 32-bit ARMv5 | armv5tel | Download (2.39+) | Download |
| 32-bit x86 without SSE2 (Pentium III, Athlon XP and older) | i686 | Download (2.17+) | Download |
| 32-bit ARMv7 without hardware floating point | armv7l | Download (2.39+) | Download |
| 32-bit ARMv6 without hardware floating point | armv6l | Download (2.39+) | Download |
| 32-bit ARMv7 with NEON, Thumb-2 build | armv7l | Download (2.39+) | — |
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Install with one command:
bash <(curl -fsSL 'https://raw.githubusercontent.com/monosans/proxy-scraper-checker/main/termux.sh')
Edit the config in a text editor:
nano ~/proxy-scraper-checker/config.toml
Run it:
cd ~/proxy-scraper-checker && ./proxy-scraper-checker
The script picks the right archive by itself. To fetch one by hand, match the output of getprop ro.product.cpu.abi:
Run uname -m and download the archive from the matching row:
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Download the 64-bit x86 archive. It needs NetBSD 10 or newer.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Download the 64-bit x86 archive.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
Run uname -p and download the archive from the matching row. It needs Solaris 11.4 or newer.
Extract the archive to a dedicated folder.
Edit config.toml.
Run it from that folder:
./proxy-scraper-checker
The Docker image logs to stdout instead of showing the interactive TUI.
Install Docker Desktop.
Download the archive for your processor:
| Processor | Download |
|---|---|
| 64-bit Intel or AMD (almost every PC) | Download |
| ARM64 (Snapdragon and other ARM laptops) | Download |
Not sure? Open Settings → System → About and look at "System type": x64-based processor means 64-bit Intel or AMD, ARM-based processor means ARM64.
Extract it to a folder and edit config.toml.
Build and run from that folder:
docker compose build
docker compose up --no-log-prefix --remove-orphans
Results land in out inside that folder; output.path is ignored in Docker.
The Docker image logs to stdout instead of showing the interactive TUI.
Install Docker Compose.
Run uname -m and download the archive from the matching row:
| Processor | uname -m | Download |
|---|---|---|
| 64-bit Intel or AMD (including Intel Macs) | x86_64 | Download |
| 64-bit ARM (Apple Silicon Macs, Raspberry Pi on a 64-bit OS) | aarch64, arm64 on macOS | Download |
| 32-bit ARMv7 | armv7l | Download |
| 32-bit Intel or AMD | i686 | Download |
| 64-bit PowerPC, little-endian | ppc64le | Download |
| 64-bit RISC-V | riscv64 | Download |
| IBM Z | s390x | Download |
Extract it to a folder and edit config.toml.
Build and run from that folder. The build arguments make the files in ./out belong to your user:
docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g)
docker compose up --no-log-prefix --remove-orphans
Results land in ./out; output.path is ignored in Docker.
Install the Rust toolchain, see https://rust-lang.org/tools/install/
Clone the repository:
git clone https://github.com/monosans/proxy-scraper-checker.git
cd proxy-scraper-checker
Build a release binary with the TUI enabled:
cargo build --features tui --release --locked
Run with the TUI:
cargo run --features tui --release --locked
The binary lands in target/release/proxy-scraper-checker on Linux/macOS, or target\release\proxy-scraper-checker.exe on Windows.
Every archive is built by GitHub Actions from the public source and published by the CI workflow straight from GitHub's runners, never from someone's computer:
To check a downloaded archive without installing anything:
Get-FileHash <archive> in PowerShell, shasum -a 256 <archive> on macOS, sha256sum <archive> on Linux and Termux, sha256 <archive> on FreeBSD.To check the signature itself, use the GitHub CLI:
gh attestation verify <archive> \
--repo monosans/proxy-scraper-checker \
--signer-workflow monosans/proxy-scraper-checker/.github/workflows/ci.yml
The Docker images are attested the same way, and the prebuilt Docker archives pin the image by digest, so docker compose build uses exactly the image CI built.
out/
├── proxies.json working proxies with metadata, compact
├── proxies_pretty.json the same data, indented
└── proxies/
├── all.txt every proxy, with its protocol prefix
├── http.txt one file per enabled protocol, no prefix
├── socks4.txt
└── socks5.txt
A text line is host:port, or username:password@host:port for a proxy that needs credentials, with protocol:// in front of either in all.txt.
{
"protocol": "socks5",
"username": null,
"password": null,
"host": "1.2.3.4",
"port": 1080,
"timeout": 0.42,
"exit_ip": "5.6.7.8",
"asn": {
"autonomous_system_number": 12345,
"autonomous_system_organization": "Example Networks"
},
"geolocation": {
"country": { "iso_code": "US", "names": { "en": "United States" } },
"city": { "names": { "en": "Chicago" } },
"location": {
"latitude": 41.85,
"longitude": -87.65,
"time_zone": "America/Chicago"
}
}
}
timeout is how long the whole request took, in seconds: connection, request and the complete response. That is also what sort_by_speed orders by. exit_ip is the address the target site actually saw, so comparing it with host spots proxies that forward through somewhere else.
exit_ip, asn and geolocation are only filled in when check_url returns the exit IP, so pointing it at an ordinary web page leaves all three null. geolocation mirrors the GeoLite2 City record (abbreviated above); fields the database has no data for are omitted, and names are English only.
Stopping a run early, with ESC or q in the TUI or Ctrl-C anywhere, writes out everything checked so far. If you stop before any proxy has been checked, the previous run's files are left untouched rather than emptied.
Want your name in this section? Support the project and it goes here.
Star the repository so other people can find it. If you are interested in sponsoring, DM me on Telegram.
This product includes GeoLite2 Data created by MaxMind, available from https://www.maxmind.com
178 followers · starred Aug 2026
27 followers · starred Jan 2022
10 followers · starred Sep 2021
41 followers · starred Nov 2022