jdeip/README.md

260 lines
5.8 KiB
Markdown
Raw Normal View History

2025-10-21 20:04:19 +08:00
# 🌐 EIP IP轮换服务
2025-10-17 17:05:19 +08:00
2025-10-21 20:04:19 +08:00
一个基于FastAPI的智能IP地址轮换管理系统支持多省份选择、自动IP切换和Web控制面板。
2025-10-17 17:05:19 +08:00
2025-10-21 20:04:19 +08:00
## ✨ 功能特性
### 🔄 核心功能
- **智能IP轮换**: 自动从可用设备中选择未使用的IP地址
- **多省份支持**: 支持上海、四川、广东等多个省份的城市选择
- **随机城市选择**: 从指定省份中随机选择城市进行IP轮换
- **使用记录追踪**: 基于Redis的IP使用记录避免重复使用
- **网关路由配置**: 自动配置网关路由规则
### 🎯 Web控制面板
- **现代化UI**: 响应式设计,支持移动端访问
- **省份选择**: 可视化省份选择,支持全选/取消全选
- **实时状态**: 显示当前IP、使用统计和网关状态
- **URL参数支持**: 通过URL参数传递客户端ID
### 🔧 技术特性
- **自动重试**: 网络请求失败时自动重试,支持指数退避
- **Token管理**: 自动处理认证令牌的获取和刷新
- **容错处理**: 兼容多种后端响应格式
- **配置管理**: 支持环境变量和配置文件
## 🚀 快速开始
### 环境要求
- Python 3.8+
- Redis服务器
- EIP服务访问权限
### 安装依赖
2025-10-17 17:05:19 +08:00
```bash
pip install -r requirements.txt
2025-10-23 15:58:53 +08:00
conda install daphne hypercorn uwsgi gunicorn
2025-10-17 17:05:19 +08:00
```
2025-10-21 20:04:19 +08:00
### 配置环境变量
创建 `app/.env` 文件:
```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
2025-10-17 17:05:19 +08:00
```
2025-10-21 20:04:19 +08:00
### 启动服务
```bash
# 开发模式
python -m app.main
# 或使用uvicorn
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
2025-10-17 17:05:19 +08:00
```
2025-10-21 20:04:19 +08:00
### 访问Web界面
- **主页**: http://localhost:8000/
- **带客户端ID**: http://localhost:8000/?id=123
- **API文档**: http://localhost:8000/docs
2025-10-17 17:05:19 +08:00
2025-10-21 20:04:19 +08:00
## 📚 API接口
2025-10-21 20:04:19 +08:00
### 核心接口
2025-10-21 20:04:19 +08:00
#### 1. IP轮换
```http
POST /proxy/rotate
Content-Type: application/json
{
"id": 123,
"citys": "上海,四川,广东"
}
```
2025-10-21 20:04:19 +08:00
**响应示例**:
```json
{
2025-10-21 20:04:19 +08:00
"changed": true,
"ip": "192.168.1.100",
"edge": "edge_device_001",
"status": {
"gateway_status": "active"
}
}
```
2025-10-21 20:04:19 +08:00
#### 2. 获取状态
```http
GET /proxy/status
```
**响应示例**:
```json
{
2025-10-21 20:04:19 +08:00
"current": {
"ip": "192.168.1.100",
"edge_id": "edge_device_001"
},
"used_today": 5,
"gateway": {
"status": "active"
}
}
```
2025-10-21 20:04:19 +08:00
#### 3. 获取城市列表
```http
GET /proxy/cities
```
**响应示例**:
```json
{
"data": ["上海", "四川", "广东"]
}
```
### 健康检查
```http
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轮换逻辑
- 随机城市选择算法
- 使用记录管理
- 网关路由配置
- 网关路由配置
2025-10-21 20:04:19 +08:00
### Redis存储 (`redis_store.py`)
- IP使用记录存储
- 按天统计使用情况
- 当前状态管理
### Web控制面板
- 现代化响应式界面
- 省份可视化选择
- 实时状态显示
- 异步操作支持
## 🎨 Web界面功能
### 主要特性
- **省份选择**: 支持多选省份,默认全选
- **客户端ID**: 通过URL参数传递支持 `?id=123`
- **实时轮换**: 一键执行IP轮换操作
- **状态显示**: 显示轮换结果和错误信息
- **响应式设计**: 支持桌面和移动设备
### 使用方式
1. 访问 `http://localhost:8000/` 进入控制面板
2. 选择需要的省份(默认全选)
3. 点击"开始IP轮换"按钮
4. 查看轮换结果
## 🔒 安全特性
- **环境变量**: 敏感信息通过环境变量管理
- **Token自动刷新**: 避免令牌过期问题
- **错误处理**: 完善的异常处理机制
- **输入验证**: 严格的参数验证
## 📊 监控和日志
- **健康检查**: `/health` 端点提供服务状态
- **使用统计**: Redis记录IP使用情况
- **错误日志**: 详细的错误信息和调试输出
- **状态监控**: 实时网关和连接状态
## 🛠️ 开发指南
### 添加新城市
`config.py` 中的 `city_dict` 添加新的省份和城市:
```python
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控制面板
- ✅ 自动重试机制
- ✅ 详细中文注释
## 🤝 贡献指南
1. Fork 项目
2. 创建功能分支
3. 提交更改
4. 推送到分支
5. 创建 Pull Request
## 📄 许可证
本项目采用 MIT 许可证。
## 🆘 支持
如有问题或建议,请创建 Issue 或联系开发团队。
---
2025-10-17 17:05:19 +08:00
2025-10-21 20:04:19 +08:00
**注意**: 使用前请确保已正确配置EIP服务凭据和Redis连接。