全手动获取独一无二的Cloudflare中转反代IP-ProxyIP

前言

出于 安全与防滥用考虑,Cloudflare 不允许其边缘节点向自身网络再次发起代理请求(即禁止“从 Cloudflare 内部访问 Cloudflare 自己的服务”)。

因此,我们需要配置中转或者反代服务,使得在访问Cloudflare网站时,经过中转服务器,通过中转服务器访问Cloudflare获取相关内容。

这个时候我们需要一台额外的服务器来搭建这个服务,但是通过自己的服务器搭建,一方面会损耗自身服务器性能,另一方面也会消耗一部分流量,可谓是不得不做的牺牲。

因此,我们的策略是直接找现成的中转服务器。

为什么会有这类服务器?

很大程度原因是没有做好安全措施,从而暴露了出来。

具体应用有很多,这边只是给出获取的方法。

操作

第一步:批量获取IP

还是通过FOFA Search Engine,使用以下命令进行获取:

asn!="13335" && asn!="209242" && port="443" && asn=="31898" && country=="JP"

条件 含义 说明
asn!="13335" ASN 不等于 13335 ASN 13335 = Cloudflare
asn!="209242" ASN 不等于 209242 ASN 209242 = M247(常见的中转服务商)
port="443" 端口是 443 典型的 HTTPS 端口
asn=="31898" ASN 等于 31898 ASN 31898 = Oracle Corporation(甲骨文云)
country=="JP" 国家是 日本 IP 所在地区为日本

也就是我们的目标是查找日本甲骨文的IP。

如果FOFA Search Engine网站打不开,可以访问中国的网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统

另外,由于FOFA每次下载的数量只有2990条,建议使用临时邮箱进行注册:临时邮箱,10分钟邮箱

因为我们只提取了端口为443的IP,因此只需用相关csv的软件将IP复制出来,保存为ip.txt即可。

第二步:环境部署

在任意一台虚拟机或者Linux服务器上,这边我以ubuntu server演示:

## 创建工作目录
mkdir proxyip
cd proxyip

## 下载用于检测服务器位置的数据
wget https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/Country.mmdb

## 创建检测脚本,脚本内容见下面
vim check.py

check.py脚本内容:

#!/usr/bin/env python3
import asyncio, aiohttp, csv
import geoip2.database

INPUT = 'ip.txt'
OUTPUT = 'results.csv'
CONCURRENCY = 100
TIMEOUT = 10
URL = 'https://check.proxyip.cmliussss.net/check?proxyip={}'
GEO_DB_PATH = 'Country.mmdb'  # 你的 MaxMind 数据库路径

async def fetch(session, ipraw, sem):
    if ':' not in ipraw:
        ipraw = ipraw + ':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()
                except:
                    data = {"raw": text}
                return ipraw, data
        except Exception as e:
            return ipraw, {"error": str(e)}

def geo_lookup(ip):
    """离线查询 IP 的地理位置,返回格式化字符串或 'N/A'"""
    try:
        ip_only = ip.split(':')[0]  # 去掉端口
        with geoip2.database.Reader(GEO_DB_PATH) as reader:
            response = reader.country(ip_only)
            country = response.country.name or ''
            iso_code = response.country.iso_code or ''
            return f"{country} ({iso_code})"
    except Exception:
        return 'N/A'

async def main():
    ips = [line.strip() for line in open(INPUT) if line.strip()]
    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]
        results = await asyncio.gather(*tasks)

    # 写入 CSV,增加 location 列
    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', 'colo_value', 'location'
        ])
        for ipraw, data in results:
            if isinstance(data, dict):
                colo_val = data.get('colo', '')
                ip_for_geo = data.get('proxyIP', ipraw)
                location = geo_lookup(ip_for_geo)
                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)),
                    colo_val,
                    location
                ])
            else:
                location = geo_lookup(ipraw)
                writer.writerow([ipraw, '', '', '', '', '', '', '', 'unexpected', '', '', location])

    print("done ->", OUTPUT)

if __name__ == "__main__":
    asyncio.run(main())

再将刚刚获取的 ip.txt 上传到这个目录,此时目录结构为:

.
├── check.py
├── Country.mmdb
├── ip.txt

接着创建python虚拟环境:

apt install python3.13-venv
python3 -m venv proxy
source proxy/bin/activate

安装依赖:

pip install geoip2
pip install aiohttp

如果无法安装到话,大概率是网络原因,可以配置代理或者使用国内镜像。类似于:pip install aiohttp -i https://pypi.tuna.tsinghua.edu.cn/simple/ ,具体方法自行搜索。

最终运行 python check.py 进行批量检测,最终在目录内生成 results.csv 文件。

Python 对缩进非常严格,必须保持一致,如果复制进去的代码报错了,可以让DeepSeek等AI进行修正。

查看结果,发现有6条验证成功:

验证测试

根据自己的测试方法,逐条测试即可。

以我这次的测试结果,没有一个是可以正常使用。

但是这个方法是没问题的,无非就是需要获取更多的IP进行检测,比较浪费时间,但是获得的收益也比较好,可以获得一个非常稳定的ProxyIP,比正常分享出来的稳定。

之前我有测试过大量的IP,可以直接访问GitHub - luuaiyan/CloudflareProxyIP: Cloudflare反代IP,用于解决Cloudflare代理后无法访问CF托管站点的回环问题。

最后

我感觉在批量获取IP的时候可以做进一步优化,更加有效的获取这些IP,有机会下次再试试吧。

0 0 投票数
文章评分
订阅评论
提醒
guest
1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部
1
0
希望看到您的想法,请您发表评论x