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

248 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 自动获取(网络抓取)
- **默认URL**`http://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模板
- **必填字段**
```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
```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上快速更改