原理:通过解码V2ray原服务器配置,使用GcoreCDN的IP替换原域名

  1. CloudFlare先配置域名DNS Record,CNAME类型
  2. 使用配置域名的服务器生成V2ray服务器配置,vmess协议,格式如:vmess://字符串
  3. 通过对服务器配置的字符串进行解码,解密出JSON字符串
  4. 获取GcoreCDN的IP,同时对IP进行Ping处理,过滤无法访问的IP,也可以对IP的443端口进行访问,判断是否有响应
  5. 用能够联通的IP替换JSON字符串中的地址,在进行编码后加上协议生成新的V2ray服务器配置

Python代码示例:

# -*- coding:utf-8 -*-
import base64
import copy
import json
from concurrent.futures import ThreadPoolExecutor

import requests
from multiping import MultiPing

ORIGINAL_CONFIG = "vmess://字符串"

ALL_CONFIG = []
IP_URL = "https://api.gcore.com/cdn/public-ip-list"
ORIGINAL_CONFIG_DECODE = json.loads(base64.b64decode(ORIGINAL_CONFIG).decode('utf-8'))
CONFIG_FILE = open('config.txt', 'w+', encoding='utf-8')


def get_request():
    request = requests.Session()
    request.trust_env = False
    return request


def get_ip_list():
    response = get_request().get(IP_URL, verify=False)
    if response.status_code == 200:
        response_body = response.json()
        return [ip.replace('/32', '') for ip in response_body.get("addresses", [])]
    else:
        return []


def do(ip):
    config = copy.deepcopy(ORIGINAL_CONFIG_DECODE)
    config["add"] = ip
    CONFIG_FILE.write(f"vmess://{base64.b64encode(json.dumps(config).encode()).decode('utf-8')}\r")


with ThreadPoolExecutor(max_workers=10) as executor:
    mp = MultiPing(get_ip_list())
    mp.send()
    responses, no_responses = mp.receive(1)
    executor.map(do, responses.keys())
CONFIG_FILE.close()