SOCKS5 & HTTP proxy checker — batch geo, DNSBL, latency, MLX mlx-apply. CLI: proxy-lane.
Project description
proxy-lane-checker
SOCKS5 & HTTP proxy checker — batch TCP, geo IP, DNSBL, and latency before Multilogin profile assign.
pip install proxy-lane-checker
proxy-lane check proxies.txt -o results.json
CLI: proxy-lane · Python 3.10+ · optional [mlx] for Launcher helpers
Concurrent proxy validator — TCP connect, HTTP through proxy, optional geo IP lookup, latency p50/p95, and optional DNSBL listing.
Outputs JSON with pass/fail per proxy and recommended tags: residential, datacenter, dead.
Problem
Proxy lists rot quickly. Before assigning IPs to scrapers or antidetect profiles, you need:
- Can we reach the host:port?
- Does HTTP actually work through the proxy?
- What country/ISP is the exit IP?
- Is latency acceptable (p50/p95)?
- Is the IP on a spam blacklist?
proxy-lane checks all of this concurrently and writes machine-readable results.
Install
pip install proxy-lane-checker
MLX profile proxy apply:
pip install proxy-lane-checker[mlx]
Quick start
# Batch check a list (table to stdout, JSON saved to -o)
proxy-lane check proxies.txt --concurrency 20 --format table -o results.json
# CSV for spreadsheets
proxy-lane check proxies.txt --format csv -o results.json
# Single proxy with geo
proxy-lane check --proxy socks5://user:pass@host:port --geo
# Dedupe before checking
proxy-lane dedupe proxies.txt -o proxies-unique.txt
# Import vendor CSV (column mapping only — no API keys)
proxy-lane import examples/brightdata.sample.csv --format brightdata -o proxies.txt
proxy-lane check examples/oxylabs.sample.csv --import-format oxylabs --geo
# Pretty-print saved results
proxy-lane report results.json --format table
Walkthrough: 48 proxies → 12 dead → tag residential
You bought a mixed list and need to know what is alive, what is dead, and which exits look residential before assigning them to MLX profiles.
# 1. Remove duplicate lines (vendor lists often repeat)
proxy-lane dedupe proxies.txt -o proxies-unique.txt
# Deduped 48 -> 45 (3 removed) -> proxies-unique.txt
# 2. Check with geo + limited concurrency (retries transient timeouts)
proxy-lane check proxies-unique.txt \
--concurrency 10 \
--geo \
--format table \
-o results.json
# Checked ... — total=45 passed=33 failed=12
# Table shows tags: dead, datacenter, residential, unknown
# 3. Export CSV for filtering in a spreadsheet
proxy-lane report results.json --format csv > results.csv
# Filter rows where tags contains "residential" and passed=yes
# 4. Apply a winner to an MLX profile
export MLX_TOKEN="..."
proxy-lane mlx-apply --profile-id "$PROFILE_ID" --proxy socks5://user:pass@residential-host:1080
In this example 48 lines became 45 unique after dedupe; 12 failed TCP/HTTP (dead tag); the remaining 33 get geo-based tags — pick residential for consumer ISP exits, datacenter for hosting ASNs.
When dead proxies break antidetect profiles (playbook)
Assigning unchecked lanes causes login loops, geo blocks, and false “fingerprint” debugging.
| Symptom | Likely cause | proxy-lane fix |
|---|---|---|
| Profile “works” then dies | Rotating dead exit | check + dedupe before every batch assign |
| Wrong country challenges | Datacenter tagged as residential | --geo + filter --tag residential on mlx-apply |
| Ads/email instant ban | Listed exit IP | --dnsbl as advisory signal |
| Slow sessions, timeouts | High p95 latency | --samples 3, drop lanes with p95 over your SLO |
Profile assign pipeline (first step in fleet QA):
proxy-lane dedupe proxies.txt -o clean.txt
proxy-lane check clean.txt --concurrency 20 --geo --dnsbl -o results.json
proxy-lane report results.json --format table
proxy-lane mlx-apply --profile-id PROFILE_UUID --results results.json --tag residential --dry-run
export MLX_TOKEN=...
proxy-lane mlx-apply --profile-id PROFILE_UUID --results results.json --tag residential
fp-coherence audit profile.yaml --strict
cdp-probe mlx --profile-id PROFILE_UUID --url https://example.com
Tags are heuristics — always spot-check against your target sites.
CLI
| Command | Description |
|---|---|
proxy-lane check FILE |
Batch validate proxies from text file |
proxy-lane check --proxy URL |
Check one proxy |
proxy-lane check --format csv|json|table |
Stdout format (-o always JSON) |
proxy-lane check --concurrency N |
Asyncio semaphore limit (default 20) |
proxy-lane import FILE --format brightdata|oxylabs|generic |
Vendor CSV → host:port[:user:pass] lines |
proxy-lane check FILE --import-format FORMAT |
Check vendor CSV directly (YAML maps in examples/) |
proxy-lane dedupe FILE [-o OUT] |
Remove duplicate proxy lines |
proxy-lane report FILE --format csv|json|table |
Format saved JSON results |
proxy-lane mlx-apply --profile-id UUID --proxy URL |
Apply proxy to MLX profile ([mlx]) |
Vendor CSV import
Maps common proxy list exports via YAML column configs in examples/ — no API keys, only header → field mapping.
--format |
Mapping file | Typical columns |
|---|---|---|
brightdata |
examples/brightdata.mapping.yaml |
host, port, username, password |
oxylabs |
examples/oxylabs.mapping.yaml |
ip, port, user, password |
generic |
examples/generic.mapping.yaml |
Edit columns to match your CSV |
# Convert CSV to proxies.txt
proxy-lane import vendor.csv --format oxylabs -o proxies.txt
# Custom mapping (copy generic.mapping.yaml)
proxy-lane import vendor.csv --format generic --mapping my.mapping.yaml -o proxies.txt
# Check without writing an intermediate file
proxy-lane check vendor.csv --import-format brightdata --concurrency 10 -o results.json
Sample fixtures: examples/*.sample.csv paired with examples/*.mapping.yaml.
Proxy line formats
http://user:pass@host:8080
socks5://user:pass@host:1080
host:port
host:port:user:pass
Lines starting with # are ignored.
Checks performed
| Check | Description |
|---|---|
| TCP | asyncio.open_connection to proxy host:port |
| HTTP | GET via proxy (default http://httpbin.org/ip) |
| Geo | ip-api.com JSON through proxy (--geo) |
| Latency | Multiple HTTP samples → p50 / p95 ms |
| DNSBL | Optional Spamhaus-style lookup (--dnsbl) |
| Retry | Up to 2 retries on transient timeouts / 5xx only |
Tags
| Tag | When |
|---|---|
dead |
TCP or HTTP failed |
datacenter |
Hosting ASN/org keywords or hosting=true from geo API |
residential |
Mobile ISP signals or residential org keywords |
unknown |
Alive but inconclusive classification |
Exit codes
| Code | Meaning |
|---|---|
0 |
All proxies passed |
1 |
One or more proxies failed |
2 |
Runtime error |
API
from proxy_lane_checker import ProxyChecker, ProxySpec
from proxy_lane_checker.runner import CheckOptions
checker = ProxyChecker(CheckOptions(concurrency=20, geo=True))
batch = checker.run([ProxySpec.from_url("socks5://user:pass@1.2.3.4:1080")])
for item in batch.results:
print(item.proxy.display, item.passed, item.tags, item.latency_p95_ms)
MLX apply ([mlx] extra)
Apply a validated proxy from check results or a direct URL. See docs/MLX_INTEGRATION.md (pairs with profile-yaml-factory).
export MLX_TOKEN="your-bearer-token"
proxy-lane check proxies.txt --geo -o results.json
proxy-lane mlx-apply --profile-id PROFILE_UUID --results results.json --tag residential
proxy-lane mlx-apply --profile-id PROFILE_UUID --results results.json --dry-run
- Default:
PATCH /profile/partial_update(proxy +proxy_masking=custom) --full:POST /profile/update--dry-run: print redacted payload, no API call
Limitations
- HTTP test URL — default probe uses
httpbin.org; blocked networks need a custom URL (future flag) or offline TCP-only inference. - Geo provider — uses ip-api.com free tier (HTTP, rate limits); not a commercial geo database.
- DNSBL accuracy — public DNS resolvers may block or rate-limit DNSBL queries; treat as advisory.
- Tag heuristics —
residential/datacenterare keyword + API flags, not ground truth. - SOCKS4 — parsed but prefer SOCKS5 for auth support.
Production
Validate lanes before mlx-apply — proxy + fingerprint + cookies must align in isolated profiles.
proxy-lane check proxies.txt --concurrency 20 --geo --dnsbl -o results.json
proxy-lane mlx-apply --profile-id "$PROFILE_ID" --results results.json --tag residential --dry-run
Pair with profile-yaml-factory, fingerprint-coherence, and playwright-cdp-probe for full profile QA.
Partner note (affiliate): Antidetect platforms like Multilogin X bind proxy and fingerprint per profile — checking lanes first avoids wasting isolated slots on dead exits. Eligible new browser purchases may accept code SAAS50 at multilogin.com — verify terms before checkout. check/report/dedupe need no MLX account. Full disclosure: docs/AFFILIATE.md. Coupon details only via proxy-lane --show-deal (never printed by default).
FAQ: docs/FAQ.md — SOCKS5 proxy test, residential vs datacenter, DNSBL, mlx-apply.
Related tools (on PyPI)
| Package | CLI | Role |
|---|---|---|
| playwright-cdp-probe | cdp-probe |
CDP / WebDriver exposure score |
| cookie-jar-bridge | cookie-bridge |
Netscape ↔ Playwright cookies |
| proxy-lane-checker | proxy-lane |
Proxy TCP / HTTP / geo / DNSBL |
| fingerprint-coherence | fp-coherence |
UA / screen / timezone lint |
Toolkit pipeline: proxy-lane check → fp-coherence audit → automate → cdp-probe run → cookie-bridge validate
License
MIT
Production antidetect: Multilogin X · Code SAAS50 (-50% browser) · MIN50 (-50% cloud phone)
More scripts: @Multilogin_Scripts_Bot · Coupons
Project details
Release history Release notifications | RSS feed
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 proxy_lane_checker-0.2.2.tar.gz.
File metadata
- Download URL: proxy_lane_checker-0.2.2.tar.gz
- Upload date:
- Size: 29.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af97af0847a990d45f8da8bcfdcde44bea7ae0b7bee691d53e51fc0c43fa0968
|
|
| MD5 |
d5bf8989003980368573a350f122f759
|
|
| BLAKE2b-256 |
8b0b33c47dd5101a5afa205848cce81cba10607b8f90fccee2fa25d479ebb4a7
|
File details
Details for the file proxy_lane_checker-0.2.2-py3-none-any.whl.
File metadata
- Download URL: proxy_lane_checker-0.2.2-py3-none-any.whl
- Upload date:
- Size: 32.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24bebd9b933bf908e05982fafd3001bddc0aef3c69fbcf09491a0202c541fee5
|
|
| MD5 |
7aa88677fbc0e5483c32e35c75cd54ce
|
|
| BLAKE2b-256 |
b466134c68823b26fd4e500f9e4fc68d960c209c417d6e8a54be38e9dc6090f7
|