SkillAgentSearch skills...

Cfray

Cloudflare Config Scanner & Clean IP Finder — Test VLESS/VMess proxy configs for latency & speed + Scan all ~1.5M Cloudflare IPs to find clean, reachable edges

Install / Use

/learn @SamNet-dev/Cfray
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<div align="center">

⚡ cfray

Cloudflare Proxy Toolkit

Scan configs + Find clean IPs + Deploy Xray servers + Pipeline test with DPI bypass + Worker proxy

Python 3.8+ Zero Dependencies License: MIT Version 1.1

Englishفارسی


</div>

🇬🇧 English

📖 What is cfray?

cfray is a single-file Python proxy toolkit for VLESS/VMess configs behind Cloudflare. What started as an IP scanner is now a full suite:

  • Config Scanner — test hundreds of IPs for latency + download speed, rank by score, export the best configs
  • Clean IP Finder — scan all ~1.5M Cloudflare IPv4 addresses to find reachable edge IPs (Mega mode: ~3M probes on 2 ports)
  • Xray Pipeline Test — 3-stage pipeline that scans IPs, swaps them into your config, and expands with fragment presets + SNI variations to bypass DPI/firewall blocks
  • Deploy Xray Server — deploy a full xray-core server on any Linux VPS with systemd, TLS certs, REALITY keys, and multi-config support
  • Worker Proxy — generate a Cloudflare Worker script for a fresh workers.dev SNI on any VLESS WebSocket config
  • Connection Manager — manage inbounds, users, URIs, and uninstall on deployed servers

Zero dependencies. Just Python 3.8+ and one file.


🚀 Quick Start

# Download
git clone https://github.com/SamNet-dev/cfray.git
cd cfray

# Run interactive TUI
python3 scanner.py

# That's it! Pick your input, choose a mode, and watch the results.

📥 Input Methods

cfray supports 5 ways to load your configs:

1️⃣ Config File [1-9]

A .txt file with one VLESS or VMess URI per line:

vless://uuid@domain1.ir:443?type=ws&host=sni.com&path=/dl&security=tls#config-1
vless://uuid@domain2.ir:443?type=ws&host=sni.com&path=/dl&security=tls#config-2
vmess://eyJ2IjoiMiIsImFkZCI6...

Drop your file in the same folder as scanner.py and it shows up automatically.

2️⃣ Subscription URL [S]

Paste a remote URL that serves VLESS/VMess configs:

# Interactive
python3 scanner.py
# Press S, paste URL

# CLI
python3 scanner.py --sub https://example.com/sub.txt

Supports both plain text (one URI per line) and base64-encoded subscriptions.

3️⃣ Template + Address List [T]

Have ONE working config but want to test it against many Cloudflare IPs? This is for you.

How it works:

  1. You give a VLESS/VMess config as a template
  2. You give a .txt file with Cloudflare IPs or domains (one per line)
  3. cfray creates a config for each address by replacing the IP in your template
  4. Tests them all and finds the fastest
# Interactive
python3 scanner.py
# Press T, paste your config, enter path to address list

# CLI
python3 scanner.py --template 'vless://uuid@placeholder:443?type=ws&...' -i addresses.txt

Example address list (addresses.txt):

104.21.12.206
188.114.96.7
172.67.132.102
172.67.166.192

4️⃣ Domain JSON File

A JSON file with domain + IP data:

{"data": [
  {"domain": "example.ir", "ipv4": "104.21.x.x"},
  {"domain": "other.ir", "ipv4": "172.67.x.x"}
]}

5️⃣ Clean IP Finder [F]

Don't have any configs or IPs? cfray can scan all Cloudflare IP ranges to find clean, reachable edge IPs — then use them directly with a template for speed testing.

How it works:

  1. Generates IPs from all 14 Cloudflare IPv4 subnets (~1.5M IPs)
  2. Probes each IP with TLS handshake + Cloudflare header validation
  3. Returns all responding IPs sorted by latency
  4. Save the results or feed them into Template mode for a full speed test

Scan modes:

| Mode | IPs Tested | Ports | Est. Time | Description | |-----------|-------------|-------------|-------------|------------------------------------------| | Quick | ~4,000 | 443 | ~30 sec | 1 random IP per /24 block | | Normal | ~12,000 | 443 | ~2 min | 3 IPs per /24 + CF verify (recommended) | | Full | ~1,500,000 | 443 | 20+ min | All IPs + CF verify | | Mega | ~3,000,000 | 443 + 8443 | 30-60 min | All IPs on 2 ports for maximum coverage |

Cloudflare publishes 14 IPv4 subnets totaling ~1,511,808 unique IPs. Full and Mega modes scan all of them. Mega mode tests every IP on both port 443 and 8443 (Cloudflare's alternate HTTPS port), doubling the probes to ~3M (1.5M IPs × 2 ports). This is useful when some IPs are blocked on one port but reachable on another. Results include the port (e.g., 104.16.5.20:8443).

# Interactive
python3 scanner.py
# Press F, choose scan mode

# CLI
python3 scanner.py --find-clean --no-tui --clean-mode mega

# With custom subnets
python3 scanner.py --find-clean --no-tui --subnets "104.16.0.0/13,172.64.0.0/13"

Found IPs are saved to results/clean_ips.txt (full absolute path shown). You can then use them with Template mode to speed test a config against all discovered IPs.


🔬 How the Scan Works

Step 1: 🔍 DNS Resolution
  Resolve all domains to their Cloudflare edge IPs
  Group configs by IP (many domains share the same CF edge)

Step 2: 📡 Latency Test
  TCP connect + TLS handshake to each unique IP
  Mark alive/dead, measure ping & connection time

Step 3: 📊 Speed Test (progressive rounds)
  R1: Small file (1-5MB) → test all alive IPs
  R2: Medium file (5-25MB) → test top candidates
  R3: Large file (20-50MB) → test the best ones
  (For <50 IPs, ALL are tested in every round)

Step 4: 🏆 Scoring & Export
  Score = Latency (35%) + Speed (50%) + TTFB (15%)
  Export top configs ranked by score

⚙️ Scan Modes

| Mode | Rounds | Est. Data | Est. Time | Best For | |----------------|----------------------|-----------|------------|------------------------| | ⚡ Quick | 1MB → 5MB | ~200 MB | ~2-3 min | Fast check | | 🔄 Normal | 1MB → 5MB → 20MB | ~850 MB | ~5-10 min | Balanced (recommended) | | 🔬 Thorough | 5MB → 25MB → 50MB | ~5-10 GB | ~20-45 min | Maximum accuracy |


🖥️ Dashboard Controls

After the scan, you get an interactive dashboard:

| Key | Action | |-------|--------------------------------------------| | S | 🔄 Cycle sort: score → latency → speed | | C | 📋 View all VLESS/VMess URIs for an IP | | D | 🌐 View domains for an IP | | E | 💾 Export results (CSV + top N configs) | | A | 📦 Export ALL configs sorted best → worst | | J/K | ⬆️⬇️ Scroll up/down | | N/P | 📄 Page up/down | | B | ◀️ Back to main menu (new scan) | | H | ❓ Help | | Q | 🚪 Quit |


🔧 CLI Options

python3 scanner.py [options]

| Option | Description | Default | |---------------------|------------------------------------------|----------| | -i, --input | Input file (VLESS URIs or .json) | — | | --sub | Subscription URL | — | | --template | VLESS/VMess template URI (use with -i) | — | | -m, --mode | quick / normal / thorough | normal | | --rounds | Custom rounds, e.g. "1MB:200,5MB:50" | auto | | -w, --workers | Latency test workers | 300 | | --speed-workers | Download test workers | 10 | | --timeout | Latency timeout (seconds) | 5 | | --speed-timeout | Download timeout (seconds) | 30 | | --skip-download | Latency only, no speed test | off | | --top | Export top N configs (0 = all) | 50 | | --no-tui | Headless mode (plain text output) | off | | -o, --output | CSV output path | auto | | --output-configs | Config file output path | auto | | --find-clean | Find clean Cloudflare IPs | off | | --clean-mode | quick / normal / full / mega | normal | | --subnets | Custom subnets (file or comma-separated) | all CF |


💡 Examples

# Interactive TUI — easiest way
python3 scanner.py

# Quick scan with subscription
python3 scanner.py --sub https://example.com/sub.txt --mode quick

# Template: test one config against 500 IPs
python3 scanner.py --template 'vless://uuid@x:443?type=ws&host=sni.com&security=tls#test' -i ips.txt

# Headless mode for scripts/cron
python3 scanner.py -i configs.txt --no-tui --mode normal -o results.csv

# Latency only (no download test)
python3 scanner.py -i configs.txt --skip-download

# Custom rounds
python3 scanner.py -i configs.txt --rounds "2MB:100,10MB:30,50MB:10"

# Find clean Cloudflare IPs (interactive)
python3 scanner.py   # Press F

# Find clean IPs (headless, mega mode — ~3M probes)
python3 scanner.py --find-clean --no-tui --clean-mode mega

📁 Output Files

Results are saved to the results/ folder:

| File | Contents | |----------------------|-----------------------------------------| | *_results.csv | Full CSV with all metrics | | *_top50.txt | Top 50 VLESS/VMess URIs (ready to use) | | *_full_sorted.txt | ALL configs sorted best → worst | | clean_ips.txt | Clean Cloudflare IPs from IP finde

View on GitHub
GitHub Stars110
CategoryDevelopment
Updated5d ago
Forks18

Languages

Python

Security Score

100/100

Audited on Mar 28, 2026

No findings