🌐 EIP IP轮换服务
一个基于FastAPI的智能IP地址轮换管理系统,支持多省份选择、自动IP切换和Web控制面板。
✨ 功能特性
🔄 核心功能
- 智能IP轮换: 自动从可用设备中选择未使用的IP地址
- 多省份支持: 支持上海、四川、广东等多个省份的城市选择
- 随机城市选择: 从指定省份中随机选择城市进行IP轮换
- 使用记录追踪: 基于Redis的IP使用记录,避免重复使用
- 网关路由配置: 自动配置网关路由规则
🎯 Web控制面板
- 现代化UI: 响应式设计,支持移动端访问
- 省份选择: 可视化省份选择,支持全选/取消全选
- 实时状态: 显示当前IP、使用统计和网关状态
- URL参数支持: 通过URL参数传递客户端ID
🔧 技术特性
- 自动重试: 网络请求失败时自动重试,支持指数退避
- Token管理: 自动处理认证令牌的获取和刷新
- 容错处理: 兼容多种后端响应格式
- 配置管理: 支持环境变量和配置文件
🚀 快速开始
环境要求
- Python 3.8+
- Redis服务器
- EIP服务访问权限
安装依赖
pip install -r requirements.txt
配置环境变量
创建 app/.env 文件:
# EIP服务配置
EIP_BASE_URL=https://smart.jdbox.xyz:58001
EIP_USERNAME=your_username
EIP_PASSWORD=your_password
EIP_GATEWAY_MAC=your_gateway_mac
EIP_DEFAULT_CITYHASH=your_default_cityhash
EIP_DEFAULT_NUM=10
# Redis配置
REDIS_URL=redis://localhost:6379/0
# 日志级别
LOG_LEVEL=INFO
启动服务
# 开发模式
python -m app.main
# 或使用uvicorn
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
访问Web界面
- 主页: http://localhost:8000/
- 带客户端ID: http://localhost:8000/?id=123
- API文档: http://localhost:8000/docs
📚 API接口
核心接口
1. IP轮换
POST /proxy/rotate
Content-Type: application/json
{
"id": 123,
"citys": "上海,四川,广东"
}
响应示例:
{
"changed": true,
"ip": "192.168.1.100",
"edge": "edge_device_001",
"status": {
"gateway_status": "active"
}
}
2. 获取状态
GET /proxy/status
响应示例:
{
"current": {
"ip": "192.168.1.100",
"edge_id": "edge_device_001"
},
"used_today": 5,
"gateway": {
"status": "active"
}
}
3. 获取城市列表
GET /proxy/cities
响应示例:
{
"data": ["上海", "四川", "广东"]
}
健康检查
GET /health
🏗️ 项目结构
jdeip/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI应用入口
│ ├── config.py # 配置管理
│ ├── eip_client.py # EIP客户端
│ ├── rotation_service.py # IP轮换服务
│ ├── redis_store.py # Redis存储
│ ├── routers/
│ │ └── proxy.py # API路由
│ └── templates/
│ └── index.html # Web控制面板
├── requirements.txt # 依赖包
├── README.md # 项目文档
└── .env # 环境变量配置
🔧 核心模块
EIP客户端 (eip_client.py)
- 处理与EIP服务的所有通信
- 自动认证和令牌管理
- 支持设备列表、网关配置等操作
- 内置重试机制和错误处理
轮换服务 (rotation_service.py)
- 核心IP轮换逻辑
- 随机城市选择算法
- 使用记录管理
- 网关路由配置
Redis存储 (redis_store.py)
- IP使用记录存储
- 按天统计使用情况
- 当前状态管理
Web控制面板
- 现代化响应式界面
- 省份可视化选择
- 实时状态显示
- 异步操作支持
🎨 Web界面功能
主要特性
- 省份选择: 支持多选省份,默认全选
- 客户端ID: 通过URL参数传递,支持
?id=123 - 实时轮换: 一键执行IP轮换操作
- 状态显示: 显示轮换结果和错误信息
- 响应式设计: 支持桌面和移动设备
使用方式
- 访问
http://localhost:8000/进入控制面板 - 选择需要的省份(默认全选)
- 点击"开始IP轮换"按钮
- 查看轮换结果
🔒 安全特性
- 环境变量: 敏感信息通过环境变量管理
- Token自动刷新: 避免令牌过期问题
- 错误处理: 完善的异常处理机制
- 输入验证: 严格的参数验证
📊 监控和日志
- 健康检查:
/health端点提供服务状态 - 使用统计: Redis记录IP使用情况
- 错误日志: 详细的错误信息和调试输出
- 状态监控: 实时网关和连接状态
🛠️ 开发指南
添加新城市
在 config.py 中的 city_dict 添加新的省份和城市:
city_dict = {
"新省份": {
"城市1": "城市编码1",
"城市2": "城市编码2"
}
}
自定义配置
修改 app/.env 文件中的配置项,或通过环境变量覆盖。
扩展功能
- 在
rotation_service.py中添加新的轮换策略 - 在
eip_client.py中添加新的EIP操作 - 在
routers/proxy.py中添加新的API端点
📝 更新日志
v1.0.0
- ✅ 基础IP轮换功能
- ✅ 多省份支持
- ✅ Redis存储集成
- ✅ Web控制面板
- ✅ 自动重试机制
- ✅ 详细中文注释
🤝 贡献指南
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
📄 许可证
本项目采用 MIT 许可证。
🆘 支持
如有问题或建议,请创建 Issue 或联系开发团队。
注意: 使用前请确保已正确配置EIP服务凭据和Redis连接。
Description
Languages
Python
77%
HTML
23%