云函数实现代理绕过IP封锁
字数 1380 2025-08-22 12:22:54

云函数实现代理绕过IP封锁 - 详细教学文档

1. 云函数简介

云函数(Serverless Functions)是一种事件驱动的计算服务,允许开发者编写和部署代码而无需管理底层服务器资源。

核心特点:

  • 无服务器管理:无需维护服务器,云平台自动处理执行环境
  • 按需计费:基于实际执行的计算资源和时间收费
  • 事件驱动:可由HTTP请求、文件上传等事件触发
  • 自动扩展:根据请求量自动扩展或缩减资源
  • 快速部署:代码上传后立即生效,迭代灵活

2. 应用场景

  • API后端服务
  • 文件处理(图像、视频等)
  • 数据处理(日志、流媒体等)
  • 自动化任务
  • 物联网(IoT)数据处理
  • 代理服务(本文重点)

3. 部署服务端(腾讯云示例)

3.1 创建云函数

  1. 访问腾讯云函数控制台:https://console.cloud.tencent.com/scf/index
  2. 选择"新建函数"
  3. 配置选项:
    • 创建方式:从头开始
    • 函数类型:事件函数
    • 运行环境:Python 3.6

3.2 函数代码配置

# -*- coding: utf8 -*-
import json
import pickle
from base64 import b64decode, b64encode
import requests

SCF_TOKEN = "TOKEN"  # 自定义随机值,用于鉴权

def authorization():
    return {
        "isBase64Encoded": False,
        "statusCode": 401,
        "headers": {},
        "body": "Please provide correct SCF-Token",
    }

def main_handler(event: dict, context: dict):
    try:
        token = event["headers"]["scf-token"]
    except KeyError:
        return authorization()
    
    if token != SCF_TOKEN:
        return authorization()
    
    data = event["body"]
    kwargs = json.loads(data)
    kwargs['data'] = b64decode(kwargs['data'])
    
    r = requests.request(**kwargs, verify=False, allow_redirects=False)
    serialized_resp = pickle.dumps(r)
    
    return {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {},
        "body": b64encode(serialized_resp).decode("utf-8"),
    }

3.3 创建函数URL

  1. 在函数配置中找到"触发管理"
  2. 创建"函数URL"作为触发器
  3. 获取生成的API地址(后续客户端会用到)

4. 部署客户端

4.1 安装mitmproxy

pip3 install mitmproxy

4.2 HTTPS证书安装

首次运行mitmdump命令后,证书会自动生成在:

  • Windows: C:\Users\xxx\.mitmproxy\
  • Linux/macOS: ~/.mitmproxy/

双击证书文件安装到系统信任库。

4.3 客户端代码配置

创建client.py文件:

# -*- coding: utf8 -*-
import json
import pickle
from typing import List
from random import choice
from urllib.parse import urlparse
from base64 import b64encode, b64decode
import mitmproxy

scf_servers: List[str] = [
    "https://111111-zzzzz.ap-beijing.tencentscf.com",
    "http://111111-zzzzz.ap-beijing.tencentscf.com"
]  # 替换为你的函数URL

SCF_TOKEN = "TOKEN"  # 与服务端保持一致

def request(flow: mitmproxy.http.HTTPFlow):
    scf_server = choice(scf_servers)
    r = flow.request
    data = {
        "method": r.method,
        "url": r.pretty_url,
        "headers": dict(r.headers),
        "cookies": dict(r.cookies),
        "params": dict(r.query),
        "data": b64encode(r.raw_content).decode("ascii"),
    }
    flow.request = flow.request.make(
        "POST",
        url=scf_server,
        content=json.dumps(data),
        headers={
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, compress",
            "Accept-Language": "en-us;q=0.8",
            "Cache-Control": "max-age=0",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
            "Connection": "close",
            "Host": urlparse(scf_server).netloc,
            "SCF-Token": SCF_TOKEN,
        },
    )

def response(flow: mitmproxy.http.HTTPFlow):
    if flow.response.status_code != 200:
        mitmproxy.ctx.log.warn("Error")
    
    if flow.response.status_code == 401:
        flow.response.headers = Headers(content_type="text/html;charset=utf-8")
        return
    
    if flow.response.status_code == 433:
        flow.response.headers = Headers(content_type="text/html;charset=utf-8")
        flow.response.text = "<html><body>操作超时,可在函数配置中修改执行超时时间</body></html>"
        return
    
    if flow.response.status_code == 200:
        body = flow.response.content.decode("utf-8")
        resp = pickle.loads(b64decode(body))
        r = flow.response.make(
            status_code=resp.status_code,
            headers=dict(resp.headers),
            content=resp.content,
        )
        flow.response = r

5. 使用测试

启动本地代理:

mitmdump -s client.py -p 9999 --no-http2

配置代理

  1. 配置浏览器或应用使用本地代理:

    • 地址:127.0.0.1
    • 端口:9999
  2. 访问网站验证:

    • 正常流量状态码应为200
    • 每次请求IP都会改变(腾讯云出口IP)

6. 验证IP变化

  1. 在VPS上启动简单HTTP服务:

    python -m http.server 1234
    
  2. 通过代理访问VPS服务

  3. 检查VPS日志,确认每次请求来源IP不同

7. 技术原理

  1. 请求流程

    • 本地应用 → mitmproxy拦截 → 转发到云函数
    • 云函数执行请求 → 返回结果给mitmproxy
    • mitmproxy返回给应用
  2. IP变化机制

    • 云函数每次执行可能使用不同出口IP
    • 模拟了代理池的效果
  3. 安全机制

    • SCF_TOKEN验证确保只有授权客户端可以使用
    • 数据通过base64和pickle序列化传输

8. 注意事项

  1. 免费额度:新用户可试用三个月云函数服务
  2. 性能限制:注意云函数的执行时间和内存限制
  3. 合规使用:遵守云服务商和网站的使用条款
  4. HTTPS支持:必须安装mitmproxy证书才能代理HTTPS流量
  5. 错误处理:注意处理超时和认证失败的情况

9. 替代方案比较

方法 优点 缺点
云函数代理 免费额度可用,IP自动变化 需要技术配置
手机热点 简单直接 需要手动切换,不稳定
商业代理池 专业稳定 需要付费

10. 扩展应用

此技术还可用于:

  • 爬虫开发避免IP封锁
  • 访问地域限制内容
  • 安全测试中的源IP隐藏
  • 分布式请求测试

通过以上详细配置,您可以成功搭建一个基于云函数的动态IP代理系统,有效绕过IP封锁限制。

云函数实现代理绕过IP封锁 - 详细教学文档 1. 云函数简介 云函数(Serverless Functions)是一种事件驱动的计算服务,允许开发者编写和部署代码而无需管理底层服务器资源。 核心特点: 无服务器管理 :无需维护服务器,云平台自动处理执行环境 按需计费 :基于实际执行的计算资源和时间收费 事件驱动 :可由HTTP请求、文件上传等事件触发 自动扩展 :根据请求量自动扩展或缩减资源 快速部署 :代码上传后立即生效,迭代灵活 2. 应用场景 API后端服务 文件处理(图像、视频等) 数据处理(日志、流媒体等) 自动化任务 物联网(IoT)数据处理 代理服务 (本文重点) 3. 部署服务端(腾讯云示例) 3.1 创建云函数 访问腾讯云函数控制台:https://console.cloud.tencent.com/scf/index 选择"新建函数" 配置选项: 创建方式:从头开始 函数类型:事件函数 运行环境:Python 3.6 3.2 函数代码配置 3.3 创建函数URL 在函数配置中找到"触发管理" 创建"函数URL"作为触发器 获取生成的API地址(后续客户端会用到) 4. 部署客户端 4.1 安装mitmproxy 4.2 HTTPS证书安装 首次运行 mitmdump 命令后,证书会自动生成在: Windows: C:\Users\xxx\.mitmproxy\ Linux/macOS: ~/.mitmproxy/ 双击证书文件安装到系统信任库。 4.3 客户端代码配置 创建 client.py 文件: 5. 使用测试 启动本地代理: 配置代理 配置浏览器或应用使用本地代理: 地址:127.0.0.1 端口:9999 访问网站验证: 正常流量状态码应为200 每次请求IP都会改变(腾讯云出口IP) 6. 验证IP变化 在VPS上启动简单HTTP服务: 通过代理访问VPS服务 检查VPS日志,确认每次请求来源IP不同 7. 技术原理 请求流程 : 本地应用 → mitmproxy拦截 → 转发到云函数 云函数执行请求 → 返回结果给mitmproxy mitmproxy返回给应用 IP变化机制 : 云函数每次执行可能使用不同出口IP 模拟了代理池的效果 安全机制 : SCF_ TOKEN验证确保只有授权客户端可以使用 数据通过base64和pickle序列化传输 8. 注意事项 免费额度 :新用户可试用三个月云函数服务 性能限制 :注意云函数的执行时间和内存限制 合规使用 :遵守云服务商和网站的使用条款 HTTPS支持 :必须安装mitmproxy证书才能代理HTTPS流量 错误处理 :注意处理超时和认证失败的情况 9. 替代方案比较 | 方法 | 优点 | 缺点 | |------|------|------| | 云函数代理 | 免费额度可用,IP自动变化 | 需要技术配置 | | 手机热点 | 简单直接 | 需要手动切换,不稳定 | | 商业代理池 | 专业稳定 | 需要付费 | 10. 扩展应用 此技术还可用于: 爬虫开发避免IP封锁 访问地域限制内容 安全测试中的源IP隐藏 分布式请求测试 通过以上详细配置,您可以成功搭建一个基于云函数的动态IP代理系统,有效绕过IP封锁限制。