Proxy checker for Linux and macOS in bash, with RBL and site checks
remcheck.sh checks a proxy list in hundreds of threads right on your server: which proxies answer, how fast and from which IP. Two more modes match exit IPs against 17 spam lists and count how many proxies Google, LinkedIn, Avito and other sites let through.
- bash and curl, nothing to install
- up to 1000 threads
- connect, rbl and target modes
- free

Running in a minute
Nothing to install: bash, curl and the standard tools already ship with macOS and most Linux servers. The script checks them at start and prints the install command if something is missing.
- Download the script
Straight to the server where the proxies will work.
curl -fsSLO https://remproxy.com/ files/ remcheck.sh - Allow it to run
Once, right after the download.
chmod +x remcheck.sh - Check your list
Pass the subscription ID from the panel; your_proxy_id is unique to every subscription. Results appear in a new folder next to the script.
./remcheck.sh -P socks5 -f your_proxy_id
If the script says missing tools
It happens on minimal Debian and Alpine images and in Docker containers. Install what is missing with one command for your system:
sudo apt-get update && sudo apt-get install -y curl gawk coreutils grep sedsudo dnf install -y curl gawk coreutils grep sedapk add bash curl coreutils gawk grep sedmacOS: everything is already there, nothing to install.
Three modes
connect: live and fast
The script opens a page that returns the IP through every proxy and records the response time. Live proxies go to alive.txt, the fastest on top.
./remcheck.sh -n 200 -T 8 -f your_proxy_id rbl: live and clean
Every exit IP gets looked up in 17 spam lists over DNS over HTTPS. For a RemProxy subscription the script takes the addresses from the real_ip column, so the lookup starts at once, without connecting through the proxies. Other lists get a connect pass first. Clean proxies go to clean.txt, listed ones to listed.txt.
./remcheck.sh -m rbl -n 100 -f your_proxy_id target: how many proxies a site lets in
The script opens Google, LinkedIn, Avito and 13 more services, or your own URL, through every proxy with browser headers. Answers split into working, captcha, antibot, blocked and limit. First every site is opened from the machine itself without a proxy: if the site rejects that too, it checks the client, not the IP. Working proxies for each site go to ok-site.txt.
./remcheck.sh -m target -t google,linkedin,avito -S 300 -f your_proxy_id Options
-f LIST- Proxy list: RemProxy subscription ID or a link to the list. A file works too. To pass the list through a pipe, use
-f -, for example:cat list.txt | ./remcheck.sh -f - -m MODE- Mode: connect (default), rbl or target.
-t LIST- Target mode: services and URLs separated by commas, for example -t google,linkedin,shop=https://example.com/, or -t all for all 16.
-k TEXT- Target mode: a page of your own URL counts as working only when it contains this text.
-S NUM- Connect and target modes: check a random sample of NUM proxies.
-n NUM- How many proxies to check at once, 64 by default, 1000 at most. In rbl mode it also sets how many IPs go to the spam lists at once: 128 without -n, 256 at most.
-T SEC-Timeout SEC- Timeout per proxy in seconds, 10 by default. -Timeout SEC works too, the same key as in the Windows version.
-r NUM- Attempts per proxy in connect mode, 2 by default, 5 at most. Each retry goes to another echo page.
-P PROTO- Protocol for lines without a scheme: http (default), socks5 or socks4.
-e URLS- Pages that answer with the caller IP, separated by commas. Five by default: icanhazip, ipify, Amazon checkip, ifconfig.me and ipinfo.
-d DIR- Folder for the results, remcheck-DATE-TIME by default.
-C- rbl mode with a RemProxy subscription: connect through every proxy anyway instead of taking IPs from the real_ip column.
-q- No progress line. Under cron it turns off by itself.
List formats
The script reads different notations in one file and skips repeats and empty lines. The CSV from the RemProxy panel works too.
host:port
host:port:user:pass
user:pass@host:port
socks5://user:pass@host:port
ip;port;country;speed;uptime;real_ipWhat appears in the folder
alive.txtWorking proxies, the fastest on top.dead.txtProxies that did not answer.results.tsvTable: a row per proxy, in target mode per proxy and service, with the reason for every answer.clean.txtrbl mode: live proxies with a clean exit IP.listed.txtrbl mode: live proxies whose IP sits in spam lists.ok-NAME.txtTarget mode: proxies that opened the service, fastest first.summary.txtTarget mode: the summary table by service.
Checking a RemProxy list
The subscription ID is enough, the script fetches the CSV list itself. In rbl mode the script takes exit IPs from the real_ip column and never connects through the proxies. Every line of the list gets its own check, 128 at a time, so 1000 proxies take under a minute. The summary gives clean and listed proxies as counts and percentages.
./remcheck.sh -m rbl -f your_proxy_id Keep -n at or below the thread count of your package, or part of the checks hits the limit and lands among the dead.
When the IP is not in the whitelist
The list is served only to IPs from the subscription whitelist. If this machine is not there, the script stops and prints its IP: open panel.remproxy.com/subscriptions, choose the subscription and add this IP to Allowed IPs in the Access section, then run the check again. Exit code 3 marks this case in cron logs.
remcheck: the list server rejected this machine, its IP is not in the subscription whitelist.
IP of this machine: 203.0.113.7
Allowed IPs of the plan: 198.51.100.20Checks on a schedule
The script has no periodic mode: cron keeps the schedule. The check starts by itself, and the latest result always sits in the same folder.
- Open the schedule with crontab -e.
- Add the line below: a check every 30 minutes, results in remcheck-latest, the log in remcheck.log.
- Save the file. crontab -l shows the schedule.
crontab -e*/30 * * * * $HOME/remcheck.sh -P socks5 -f your_proxy_id -d $HOME/remcheck-latest -q >> $HOME/remcheck.log 2>&1 cron works the same way on macOS, but it needs Full Disk Access to reach Documents and Desktop. Keeping the script and the list in your home folder is easier.
Requirements: bash 3.2 or newer, curl, awk, sed, grep, sort.
Running on Windows
Windows has its own PowerShell version: the same modes and options, no Git Bash or WSL needed, scheduling through Task Scheduler.
Proxy checker for WindowsQuestions and answers
01How many threads should I set?
02Why are all proxies from my RemProxy list dead?
03Why use the rbl mode if the proxies work anyway?
04Does the script send my proxies anywhere?
05How do I check SOCKS5?
06Why do Ozon, Wildberries and Yandex show 0% in target mode?
Need a pool for mass checks?
MIX pools of up to 25,000 IPs, unlimited traffic, HTTP and SOCKS5 on one port, access by IP. A test hour costs $1.
See packages
