🤔 什么是 ProxyIP ?
📖 ProxyIP 概念
在 Cloudflare Workers 环境中,ProxyIP 特指那些能够成功代理连接到 Cloudflare 服务的第三方 IP 地址。
🔧 技术原理
根据 Cloudflare Workers 的 TCP Sockets 官方文档 说明,存在以下技术限制:
⚠️ Outbound TCP sockets to Cloudflare IP ranges ↗ are temporarily blocked, but will be re-enabled shortly.
这意味着 Cloudflare Workers 无法直接连接到 Cloudflare 自有的 IP 地址段。为了解决这个限制,需要借助第三方云服务商的服务器作为"跳板":
Cloudflare Workers → ProxyIP 服务器 → Cloudflare 服务
(发起请求) (第三方代理) (目标服务)
通过第三方服务器反向代理 Cloudflare 的 443 端口,实现 Workers 对 Cloudflare 服务的访问。
简单来说,就是基于CF的代理,无法访问套了CF CDN的网站,通过配置ProxyIP作为跳板,从而达到可以访问这些网站。
不要觉得这个不重要,现在托管在CF的网站非常多,如果不配置ProxyIP,网站的大门都进不去。
方法一:自选(稍麻烦)
访问:ipdb.api.030101.xyz/?type=proxy获取IP。
逐个 CTRL+C
CTRL+V
在Check ProxyIP - 代理IP检测服务上面测试。
IP来源:GitHub - ymyuuu/IPDB: Cloudflare反代优选IP库
使用Python批量测试
建议在Linux虚拟机上测试。
1.IP地址文件
将上述IP保存为 ip.txt
,每行一个 IP 地址,可以带有端口(例如 1.2.3.4:8080
)或没有端口(默认为 443
)。
2.创建Python脚本
例如 batch_check_async.py
。将以下代码保存到该文件中:
#!/usr/bin/env python3
import asyncio, aiohttp, csv
INPUT = 'ip.txt' # 输入文件路径,假设 IP 地址都在 ip.txt 中
OUTPUT = 'results_async.csv' # 输出文件路径
CONCURRENCY = 200 # 控制并发请求数
TIMEOUT = 10 # 设置超时时间
URL = 'https://check.proxyip.cmliussss.net/check?proxyip={}' # 请求的 URL
async def fetch(session, ipraw, sem):
if ':' not in ipraw:
ipraw = ipraw + ':443' # 如果没有端口,默认加上 :443
async with sem:
try:
async with session.get(URL.format(ipraw), timeout=TIMEOUT) as r:
text = await r.text()
try:
data = await r.json() # 尝试解析为 JSON
except:
data = {"raw": text} # 如果解析失败,保存原始响应
return ipraw, data
except Exception as e:
return ipraw, {"error": str(e)}
async def main():
ips = [line.strip() for line in open(INPUT) if line.strip()] # 读取 IP 文件,去除空行
sem = asyncio.Semaphore(CONCURRENCY) # 设置并发数限制
timeout = aiohttp.ClientTimeout(total=TIMEOUT) # 设置总超时
async with aiohttp.ClientSession(timeout=timeout) as sess:
tasks = [fetch(sess, ip, sem) for ip in ips] # 为每个 IP 创建请求任务
results = await asyncio.gather(*tasks) # 并发执行请求
# 保存结果到 CSV 文件
with open(OUTPUT, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['input', 'proxyIP', 'portRemote', 'success', 'colo', 'responseTime', 'message', 'timestamp', 'error', 'raw'])
for ipraw, data in results:
if isinstance(data, dict):
writer.writerow([
ipraw,
data.get('proxyIP', ''),
data.get('portRemote', ''),
data.get('success', ''),
data.get('colo', ''),
data.get('responseTime', ''),
data.get('message', ''),
data.get('timestamp', ''),
data.get('error', ''),
str(data.get('raw', data)) # 保留原始数据
])
else:
writer.writerow([ipraw, '', '', '', '', '', '', '', 'unexpected', ''])
print("done ->", OUTPUT) # 输出文件生成提示
if __name__ == "__main__":
asyncio.run(main()) # 启动异步任务
3.运行
执行以下命令即可:
# 创建一个虚拟环境
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 安装 aiohttp
pip install aiohttp
# 运行脚本
python3 batch_check_async.py
4.输出结果
方法二:简单粗暴
打开 Check ProxyIP - 代理IP检测服务 ,直接输入 proxyip.cmliussss.net
进行检测:
感觉是一个集中转发的地址,总共有209个地址,208个可以直接使用。
任选一个有效IP或者直接使用 proxyip.cmliussss.net
即可。
方法三:自建
自建就算了,本来也没什么敏感信息。
最后
ProxyIP其实还是挺重要的,虽然Youtube、ChatGPT等都不影响,但还是架不住CF体量大,如果不用ProxyIP,很多网站莫名其妙就无法访问了。