🌐 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
conda install daphne hypercorn uwsgi gunicorn

配置环境变量

创建 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界面

📚 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轮换操作
  • 状态显示: 显示轮换结果和错误信息
  • 响应式设计: 支持桌面和移动设备

使用方式

  1. 访问 http://localhost:8000/ 进入控制面板
  2. 选择需要的省份(默认全选)
  3. 点击"开始IP轮换"按钮
  4. 查看轮换结果

🔒 安全特性

  • 环境变量: 敏感信息通过环境变量管理
  • 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控制面板
  • 自动重试机制
  • 详细中文注释

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

📄 许可证

本项目采用 MIT 许可证。

🆘 支持

如有问题或建议,请创建 Issue 或联系开发团队。


注意: 使用前请确保已正确配置EIP服务凭据和Redis连接。

Description
基于jdeip开发项目
Readme 239 KiB
Languages
Python 77%
HTML 23%