IP-Repository开源地址:https://github.com/zsanjin-p/IP-Repository
Unable to fetch GitHub data for: zsanjin-p/IP-Repository
省流介绍:配置好服务端和客户端,在客户端上定时执行,即刻可更新云端白名单库!

当你有多台设备,或者使用城域网、软路由等场景时,公网IP经常变动,访问一些敏感服务(如SSH、远程桌面、管理后台等)就会很麻烦。每次IP变了都要手动更新白名单?那太蠢了!😤
于是我做了这个自动化的IP白名单管理系统,能够自动收集所有设备的公网IP,整合到一个统一的白名单中,再也不用担心IP变动导致无法访问的问题了🎉🎉🎉
这是一个客户端-服务端架构的IP收集系统,客户端在各个设备上运行Shell脚本,自动检测公网IP并上传到服务器;服务端接收、整合、展示所有设备的IP数据,提供可视化界面和API接口。支持FTP上传和HTTP API上传两种方式。
为了方便理解实现原理,先看看系统的核心功能
客户端功能特性:
✅ 多源IP检测:使用15+国内外IP检测服务,确保获取到准确的公网IP
✅ 自动重试机制:某个检测服务失败会自动尝试其他服务
✅ IP历史记录:保存历史IP变动记录,方便追溯
✅ 设备唯一标识:自动生成设备ID,区分不同设备
✅ 双上传方式:支持FTP和HTTP API两种上传方式
✅ 双格式导出:同时生成JSON和TXT格式的数据文件
服务端功能特性:
✅ 多设备数据整合:自动接收并整合所有设备的IP数据
✅ 自动去重:智能去除重复IP,保持列表简洁
✅ 可视化界面:提供美观的Web界面查看所有数据
✅ API接口:支持多种格式的API输出(JSON、TXT、统计信息等)
✅ 频率限制:防止恶意请求,保护服务器安全
✅ API密钥验证:确保只有授权设备可以上传数据
具体使用方式:
首先从开源地址下载项目文件,开源地址:https://github.com/zsanjin-p/IP-Repository
项目中主要文件:
index.php 服务端主API文件(前端+接口)
api/processor.php FTP文件处理脚本(可选)
collect_ip.sh 客户端收集脚本
1、服务端部署
将PHP文件上传到你的Web服务器,建议目录结构:
/www/wwwroot/myip.xxxx.com/
├── index.php # 主API文件(前端+接口)
└── api/
└── processor.php # 文件处理脚本
*注意,需要修改index.php中的API密钥配置:
define('API_KEY', 'your_secret_api_key_here'); // 改成你的密钥
设置目录权限,确保PHP可以写入数据:
chmod 755 /www/wwwroot/myip.xxxx.com/api
chmod 755 /www/wwwroot/myip.xxxx.com/api/ip_data
chmod 755 /www/wwwroot/myip.xxxx.com/api/uploads
2、客户端部署
Linux/macOS用户直接运行脚本:
chmod +x collect_ip.sh
./collect_ip.sh
Windows用户用ps1脚本:
1、powershell中直接运行: .\collect_ip.sh 注意文件修改后要另存为UTF-8 with BOM,否则报错
2、设置任务计划即可
3、客户端配置
编辑collect_ip.sh,根据你的需求选择上传方式:
建议配置ftp和http api上传,并优先选择ftp,因为ftp上传失败可自动切换为http api,反之不行
方式一:FTP上传(推荐)
# 约第 8 行:选择上传方式
UPLOAD_METHOD="ftp"
# 约第 10-14 行:配置 FTP 信息
FTP_HOST="1.2.3.4" # FTP服务器地址
FTP_PORT=21 # FTP端口
FTP_USER="USER" # FTP用户名
FTP_PASS="your_ftp_password" # FTP密码
FTP_UPLOAD_DIR="/api/uploads" # 上传目录
方式二:HTTP API上传
# 约第 8 行:选择上传方式
UPLOAD_METHOD="http"
# 约第 6-7 行:配置 API
UPLOAD_URL="https://myip.xxxx.com/api/upload-ip"
API_KEY="your_secret_api_key_here" # 与服务端一致
工作目录配置(约第17行):
# Linux
WORK_DIR="/root/myiplist"
4、设置定时任务
linux用户可以用Crontab或者宝塔定时任务:
编辑定时任务:
# 编辑定时任务
crontab -e
# 每5分钟执行一次
*/5 * * * * /path/to/collect_ip.sh >> /path/to/collector.log 2>&1
# 或每小时执行
0 * * * * /path/to/collect_ip.sh
Web界面和API使用
部署完成后,直接访问你的域名即可看到可视化界面:
https://myip.xxxx.com/
界面会显示:
• 总IP数量和设备数量统计
• 所有收集到的IP列表
• 各设备的详细信息
• 最后更新时间
API接口说明:
系统提供了多种API接口方便集成:
?action=ips - 纯文本IP列表(一行一个)
?action=json - 完整JSON数据
?action=stats - 统计信息
?action=list - JSON格式(兼容旧版)
?action=list&format=txt - TXT格式(兼容旧版)
API使用示例:
# 获取所有IP(文本格式)
curl https://myip.xxxx.com/?action=ips
# 获取JSON数据
curl https://myip.xxxx.com/?action=json
# 获取统计信息
curl https://myip.xxxx.com/?action=stats
文件结构说明
服务端文件结构:
/www/wwwroot/myip.xxxx.com/
├── index.php # 主API + Web界面
├── api/
│ ├── processor.php # FTP文件处理器(可选)
│ ├── ip_data/ # 数据存储目录
│ │ ├── merged_ips.json # 整合后的IP数据
│ │ ├── ip_list.txt # 简易IP列表
│ │ ├── device1.json # 设备1的数据
│ │ └── device2.json # 设备2的数据
│ └── uploads/ # FTP上传临时目录
客户端文件结构:
/your/work/dir/
├── collect_ip.sh # 收集脚本
├── ip_history.txt # IP历史记录
├── ip_list.txt # 导出的IP列表
├── ip_data.json # 导出的JSON数据
├── collector.log # 运行日志
└── device_id.txt # 设备唯一ID
使用场景
🏠 家庭网络:收集家中多台设备的动态公网IP,方便远程访问NAS、路由器等设备
🏢 企业环境:管理分支机构的出口IP白名单,统一维护访问权限
🔒 安全访问:为SSH、VPN、远程桌面等服务维护动态白名单,防止爆破攻击
☁️ 云服务:自动更新云服务器防火墙规则,无需手动添加IP
*实用技巧:可以结合frpbanip项目使用,将收集到的IP自动添加到白名单中,其他IP自动封禁,实现更安全的服务访问控制!
安全建议
⚠️ 修改默认API密钥:使用强随机字符串,不要使用简单密码
⚠️ 限制IP访问:在Web服务器配置中限制管理界面的访问IP
⚠️ 使用HTTPS:保护数据传输安全,防止中间人攻击
⚠️ 定期清理日志:避免日志文件过大占用磁盘空间
⚠️ 备份数据:定期备份ip_data目录,防止数据丢失
现在你可以轻松管理所有设备的IP白名单,再也不用担心IP变动导致的访问问题了!配合防火墙规则或其他安全工具,让你的服务更加安全可靠🎯
喜欢这个项目可以帮忙点个star⭐
Comments NOTHING