【原创脚本】TrafficCop v2.0 – 支持多端口独立流量限制和监控!
调试了很久,花费了很大精力,远比想象中要复杂・・・求鸡腿,坛友们可以测试下,有些小 bug 实在难以修复就先搁置了。能用就行。
GitHub 项目地址: https://github.com/ypq123456789/TrafficCop
TrafficCop 现在支持为多个端口同时设置独立的流量限制!这个功能非常适合需要对特定服务(如 Web 服务器、代理服务、SSH 等)进行精细化流量管理的场景。
功能特点
- 多端口流量管理 – 同时监控和限制多个端口的流量,使用 JSON 格式存储配置
- 独立端口流量统计 – 使用 iptables 精确统计每个端口的入站和出站流量
- 实时流量查看 – 彩色可视化界面,显示所有端口的流量使用情况和进度条
- 智能配置同步 – 自动同步机器配置,也支持自定义配置
- 灵活的限制策略 – 支持两种限制模式:
- TC 模式:对端口流量进行限速
- 阻断模式:超限后完全阻断端口流量
- 配置验证 – 确保端口流量限制不超过机器总流量限制
- 推送通知集成 – 所有推送服务(Telegram、PushPlus、ServerChan)自动包含端口流量信息
- 自动化管理 – 支持定时任务自动监控和限制
使用逻辑
场景一:机器未限制流量
当机器尚未配置流量限制时,为指定端口设置流量限制会:
- 创建端口流量配置
- 询问是否同步配置到机器流量限制
- 如果选择同步,端口配置将自动应用到机器级别
场景二:机器已限制流量
当机器已配置流量限制时,为指定端口设置流量限制会:
- 检查端口流量限制是否小于等于机器流量限制
- 默认继承机器的其他配置(统计模式、周期、限制模式等)
- 允许自定义配置以满足特殊需求
安装和配置
方法一:通过管理器脚本(推荐)
选择 “5) 安装端口流量限制”
方法二:直接运行脚本
sudo mkdir -p /root/TrafficCop && \
curl -fsSL "https://raw.githubusercontent.com/ypq123456789/TrafficCop/main/port_traffic_limit.sh" | tr -d '\r' > /root/TrafficCop/port_traffic_limit.sh && \
chmod +x /root/TrafficCop/port_traffic_limit.sh && \
bash /root/TrafficCop/port_traffic_limit.sh
配置选项
在配置过程中,您需要提供:
- 端口号 – 要限制流量的端口(1-65535)
- 流量限制 – 端口允许使用的最大流量(GB)
- 容错范围 – 触发限制前的缓冲区(GB)
- 配置方式 – 选择使用机器配置或自定义配置
如果选择自定义配置,还需要设置:
- 流量统计模式(出站 / 入站 / 总计 / 最大值)
- 统计周期(月 / 季 / 年)
- 周期起始日
- 限制模式(TC 限速 / 阻断)
- 限速值(仅 TC 模式)
相关命令
查看所有端口流量(推荐)
# 普通查看
sudo bash /root/TrafficCop/view_port_traffic.sh
# 实时监控(每5秒刷新)
sudo bash /root/TrafficCop/view_port_traffic.sh --realtime
# 导出JSON报告
sudo bash /root/TrafficCop/view_port_traffic.sh --export
管理端口配置
# 打开交互式配置菜单
sudo bash /root/TrafficCop/port_traffic_limit.sh
# 删除特定端口
sudo bash /root/TrafficCop/port_traffic_limit.sh --remove 80
# 删除所有端口配置
sudo bash /root/TrafficCop/port_traffic_limit.sh --remove
通过管理器访问(推荐)
选择 12) 查看端口流量
选择 13) 管理端口配置
查看配置文件
# 查看JSON配置(多端口)
sudo cat /root/TrafficCop/ports_traffic_config.json
# 美化输出
sudo cat /root/TrafficCop/ports_traffic_config.json | jq
使用示例
场景:为多个服务配置独立流量限制
假设您的机器有 1TB 的总流量限制,您想为不同服务设置独立的流量配额:
配置多个端口:
- 运行端口配置脚本
- 添加端口 80(Web 服务):200GB 限制,10GB 容错
- 添加端口 443(HTTPS):300GB 限制,15GB 容错
- 添加端口 22(SSH):50GB 限制,5GB 容错
实时查看所有端口流量:
sudo bash /root/TrafficCop/view_port_traffic.sh
输出示例:
════════════════════════════════════════════════════════════
端口流量监控 - 2025-10-18 15:30:45
════════════════════════════════════════════════════════════
✅ 端口 80 (Web Server)
已用: 150.2 GB / 200 GB (75.1%)
[████████████████████████ ] 限速: 20kbit/s
🟡 端口 443 (HTTPS)
已用: 280.5 GB / 300 GB (93.5%)
[████████████████████████████ ] 限速: 50kbit/s
✅ 端口 22 (SSH)
已用: 15.3 GB / 50 GB (30.6%)
[█████████ ] 限速: 10kbit/s
════════════════════════════════════════════════════════════
总计: 3个端口 | 总用量: 446.0 GB | 总限制: 550 GB
════════════════════════════════════════════════════════════
推送通知示例(Telegram):
📊 [MyServer]每日流量报告
🖥️ 机器总流量:
当前使用:650.5 GB
流量限制:1000 GB
🔌 端口流量详情:
✅ 端口 80 (Web Server):150.2GB / 200GB
🟡 端口 443 (HTTPS):280.5GB / 300GB
✅ 端口 22 (SSH):15.3GB / 50GB
当某个端口流量达到限制时:
- TC 模式:端口速度将被限制到设定值(如 20kbit/s)
- 阻断模式:端口将被完全阻断,无法接收或发送数据
- 自动通知:所有配置的推送服务会发送警告通知
技术原理
端口流量限制功能使用以下技术实现:
- iptables – 创建规则统计特定端口的流量
- tc (Traffic Control) – 实现端口级别的流量控制和限速
- HTB (Hierarchical Token Bucket) – 分层流量控制,为不同端口分配不同的带宽
- Packet Marking – 使用 mangle 表标记数据包,实现精确的流量分类
配置文件格式(JSON)
{
"ports": [
{
"port": 80,
"description": "Web Server",
"traffic_limit": 200,
"traffic_tolerance": 10,
"traffic_mode": "total",
"traffic_period": "monthly",
"period_start_day": 1,
"limit_speed": 20,
"main_interface": "eth0",
"limit_mode": "tc",
"created_at": "2025-10-18 12:00:00",
"last_reset": "2025-10-01"
}
]
}
注意事项
- 依赖要求:需要 jq 工具(脚本会自动安装)和 iptables
- 流量统计:端口流量统计从配置时开始,不包含历史流量
- 先决条件:建议先运行主流量监控脚本,以确保依赖已安装
- 性能影响:TC 模式可能对端口性能有轻微影响
- 谨慎使用:阻断模式会完全禁止端口通信,请谨慎使用
- 多端口支持:✅ 2.0 版本已支持同时配置和管理多个端口
- 推送集成:端口流量信息已集成到所有推送通知中