WhereAmI/old/开发文档.md
2026-06-15 00:49:26 +08:00

7.6 KiB
Raw Blame History

WhereAmI - 多协议轮转代理工具

项目概述

项目名称WhereAmI
项目描述基于Python的轮转代理工具将各种外部代理HTTP/HTTPS/SOCKS4/SOCKS5通过本地SOCKS5转发服务部署到127.0.0.1:8745配合Proxifier使用


核心功能需求

1. 多协议支持

  • 输入协议HTTP、HTTPS、SOCKS4、SOCKS5
  • 输出协议统一转换为本地SOCKS5代理127.0.0.1:8745
  • 实现方式python先连接对应代理然后转发到本地8745端口应用程序连接socks5代理的8745端口即可

2. 代理切换机制

2.1 手动切换模式

  • GUI界面提供代理列表用户可手动选择并切换到指定代理
  • 显示当前使用代理的详细信息IP、端口、延迟、状态等

2.2 自动定时切换模式

  • 切换条件
    1. 达到设定的时间间隔默认300秒可配置
    2. 且10秒内无活动连接可配置
  • 切换策略
    • 按顺序切换到下一个可用节点
    • 跳过已失效或延迟过高的节点
    • 记录切换历史

3. 代理获取方式

3.1 自动获取(网络抓取)

  • 默认URLhttp://cn.freevpnnode.com/free-proxy-for-thailand/
  • 可配置GUI中可修改抓取URL
  • 解析流程
    1. 请求网页获取HTML内容
    2. 提取表格中的代理信息参考page.html结构
    3. 字段映射IP地址、端口、用户名、密码、国家、协议、匿名级别、速度、运行时间、延迟、更新时间
    4. 生成JSON文件保存格式参照local.json

3.2 本地文件读取

  • 文件格式JSON参照local.json模板
  • 必填字段
    {
      "ip_address": "string",
      "port": "integer",
      "username": "string (\"no need\"表示无需认证)",
      "password": "string (\"no need\"表示无需认证)",
      "protocol": "http|https|socks4|socks5"
    }
    
  • 可选字段country、anonymity、speed、uptime_percentage、response_time、latency、last_updated

4. 代理健康检测

4.1 检测方法

  • 延迟测试

    • TCP连接超时5秒
    • 合格标准:< 500ms可配置
    • 优秀标准:< 200ms
  • 连通性测试

    • Google连接测试访问 https://www.google.com/
    • 超时时间10秒
    • 预期响应204状态码

4.2 检测周期

  • 初始检测:获取代理后立即全量检测
  • 定期复检每60秒检测一次正在使用的代理
  • 失败重试连续失败3次标记为不可用10分钟后重新检测

4.3 代理分级

  • 可用:延迟<500ms 且 Google测试通过
  • 优秀:延迟<200ms 且 Google测试通过
  • 不可用:延迟>=500ms 或 Google测试失败 或 连续失败3次

5. GUI界面设计

5.1 主界面布局

  • 顶部区域

    • 服务状态指示器(运行/停止)
    • 当前代理信息卡片IP、端口、协议、延迟、国家
    • 快速操作按钮(开始/停止、立即切换)
  • 中部区域

    • 代理列表表格(支持排序、筛选)
      • IP、端口、协议、国家、延迟、状态、最后检测时间
      • 状态标识:可用 🟡一般 🔴不可用
    • 实时延迟趋势图最近5分钟
  • 底部区域

    • 日志输出窗口(可清空)
    • 统计信息(总代理数、可用数、已切换次数)

5.2 配置面板

  • 代理源设置

    • 自动获取URL输入框
    • 本地文件路径选择
    • 刷新间隔设置(分钟)
  • 轮转策略设置

    • 切换模式:手动 / 自动
    • 自动切换间隔(秒)
    • 无活动等待时间(秒)
    • 延迟阈值(毫秒)
  • 输出设置

    • SOCKS5监听地址默认127.0.0.1
    • SOCKS5监听端口默认8745
  • 检测设置

    • 检测超时时间(秒)
    • 连通性测试URL
    • 复检间隔(秒)

5.3 交互功能

  • 右键菜单:复制代理信息、标记为优先、删除
  • 拖拽排序:调整代理优先级
  • 导入/导出:配置文件、代理列表
  • 历史记录:查看切换历史、性能统计

6. 配置管理

6.1 配置文件格式config.yaml

# 代理源配置
proxy_sources:
  auto_fetch:
    enabled: true
    url: "http://cn.freevpnnode.com/free-proxy-for-thailand/"
    refresh_interval: 10  # 分钟
  local_file:
    enabled: true
    path: "local.json"

# 轮转策略
rotation:
  mode: "manual"  # manual | auto
  auto_switch_interval: 300  # 秒
  min_idle_time: 10  # 无活动连接最小等待时间(秒)
  skip_high_latency: true  # 跳过延迟>阈值的代理
  latency_threshold: 500  # 毫秒

# 输出配置
output:
  host: "127.0.0.1"
  port: 8745

# 检测配置
health_check:
  timeout: 5  # TCP连接超时
  connectivity_test_url: "https://www.google.com/"
  connectivity_timeout: 10  # 连通性测试超时(秒)
  recheck_interval: 60  # 复检间隔(秒)
  max_failures: 3  # 最大失败次数
  retry_delay: 600  # 失败后重试延迟(秒)

# 日志配置
logging:
  level: "INFO"  # DEBUG | INFO | WARNING | ERROR
  file: "whereami.log"
  max_size: 10  # MB
  backup_count: 5

3. 数据流设计

[网页/本地文件] → [ProxyManager] → [HealthChecker] → [可用代理池]
                                              ↓
[RotationEngine] ← [无活动检测] ← [SOCKS Server] ← [客户端连接]
         ↓
    [切换代理] → [更新SOCKS Server上游]

异常处理与容错

1. 常见异常场景

  • 所有代理失效

    • 提示用户并尝试重新获取代理
    • 保持最后一次可用的代理继续服务
    • 后台持续检测新代理
  • 网络波动

    • 短暂断网(<30秒保持当前代理不切换
    • 长时间断网(>=30秒暂停服务显示警告
    • 网络恢复:自动重新检测并恢复服务
  • 端口占用

    • 检测8745端口是否被占用
    • 如被占用,提示用户关闭占用进程或更换端口
  • Proxifier未运行

    • 仅作为提示,不影响程序运行
    • 在GUI中显示Proxifier状态建议

2. 数据安全

  • 认证信息加密使用Fernet对称加密存储username/password
  • 日志脱敏日志中隐藏完整的IP和密码信息
  • HTTPS证书:测试时可选择跳过证书验证(配置项)

性能优化

2. 缓存策略

  • 检测结果缓存缓存60秒避免重复检测
  • 代理列表缓存本地JSON缓存减少网络请求
  • 配置热重载:修改配置后无需重启

3. 资源控制

  • 最大并发检测数10个可配置
  • 代理池上限100个可配置
  • 内存限制:超过阈值时清理旧数据

扩展性设计

1. 插件化数据源

  • 定义DataSource接口支持添加新的代理网站
  • 示例ssrfree.com、proxynova.com等

2. 自定义测试脚本

  • 允许用户编写Python脚本自定义连通性测试方法
  • 通过配置文件指定测试脚本路径

3. API接口未来

  • RESTful API获取当前代理、切换代理、获取统计
  • WebSocket实时推送代理状态变化

GUI功能细化: 实时状态显示: 当前使用的代理信息IP、端口、协议、延迟 可用代理列表及状态(在线/离线/延迟) 历史使用记录 操作按钮: 开始/停止服务 立即切换下一个代理 使用本地代理 获取免费代理 使用cn.freevpnnode.com源 获取其他代理 预留按钮启动scratch.py并检测 导入/导出配置 监控图表: 延迟趋势图 切换历史记录 使用一个次级页面展示配置并且可以在GUI上快速更改