jdeip/README.md

260 lines
5.8 KiB
Markdown
Raw Permalink 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.

# 🌐 EIP IP轮换服务
一个基于FastAPI的智能IP地址轮换管理系统支持多省份选择、自动IP切换和Web控制面板。
## ✨ 功能特性
### 🔄 核心功能
- **智能IP轮换**: 自动从可用设备中选择未使用的IP地址
- **多省份支持**: 支持上海、四川、广东等多个省份的城市选择
- **随机城市选择**: 从指定省份中随机选择城市进行IP轮换
- **使用记录追踪**: 基于Redis的IP使用记录避免重复使用
- **网关路由配置**: 自动配置网关路由规则
### 🎯 Web控制面板
- **现代化UI**: 响应式设计,支持移动端访问
- **省份选择**: 可视化省份选择,支持全选/取消全选
- **实时状态**: 显示当前IP、使用统计和网关状态
- **URL参数支持**: 通过URL参数传递客户端ID
### 🔧 技术特性
- **自动重试**: 网络请求失败时自动重试,支持指数退避
- **Token管理**: 自动处理认证令牌的获取和刷新
- **容错处理**: 兼容多种后端响应格式
- **配置管理**: 支持环境变量和配置文件
## 🚀 快速开始
### 环境要求
- Python 3.8+
- Redis服务器
- EIP服务访问权限
### 安装依赖
```bash
pip install -r requirements.txt
conda install daphne hypercorn uwsgi gunicorn
```
### 配置环境变量
创建 `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
```
### 启动服务
```bash
# 开发模式
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轮换
```http
POST /proxy/rotate
Content-Type: application/json
{
"id": 123,
"citys": "上海,四川,广东"
}
```
**响应示例**:
```json
{
"changed": true,
"ip": "192.168.1.100",
"edge": "edge_device_001",
"status": {
"gateway_status": "active"
}
}
```
#### 2. 获取状态
```http
GET /proxy/status
```
**响应示例**:
```json
{
"current": {
"ip": "192.168.1.100",
"edge_id": "edge_device_001"
},
"used_today": 5,
"gateway": {
"status": "active"
}
}
```
#### 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轮换逻辑
- 随机城市选择算法
- 使用记录管理
- 网关路由配置
- 网关路由配置
### 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 或联系开发团队。
---
**注意**: 使用前请确保已正确配置EIP服务凭据和Redis连接。