go语言实现高性能端口转发程序port-forward支持限速限流配套魔方插件
简介
本程序使用Go语言的net包实现端口转发,使用令牌桶算法实现速率限制,通过计数器跟踪已使用的总流量,使用JSON文件存储规则配置和状态,使用goroutine实现并发处理连接。适用于各类需要端口转发的业务场景,提供完善的API进行管理,可方便的对接各类程序。
目前程序已完成魔方财务系统对接,可通过魔方财务售卖开通端口转发业务,可实现流量限制,带宽限制,端口数量限制等。具有完备的生命周期管理。
特点
API服务器启动与配置:
- 通过命令行参数配置API服务器的监听地址、规则存储文件路径和API鉴权密钥。
- 支持API Key鉴权,确保请求的安全性。
规则管理:
- 支持创建、更新、删除和获取转发规则。
- 每个规则包含源端口、目标IP和端口、协议类型(TCP或UDP)、流量限制和速率限制等信息。
- 支持自动分配默认组和名称。
组管理:
- 支持创建、更新、删除和获取规则组。
- 每个组可以设置流量和速率限制,管理多个转发规则。
端口转发:
- 支持TCP和UDP协议的端口转发。
- 使用限流器实现流量和速率限制。
- 支持自动重启活跃的转发规则。
数据持久化:
- 使用JSON文件存储规则和组信息。
- 支持定时自动保存规则和组信息,确保数据的持久性。
并发控制:
- 使用互斥锁(Mutex)和读写锁(RWMutex)确保多线程环境下的数据安全。
错误处理与日志记录:
- 在操作失败时返回详细的错误信息。
- 记录日志以便于调试和监控。
在这个api.go
文件中,API服务器提供了多个端点用于管理规则和组。以下是所有API端点的概述:
API端点
为了方便插件对接,API未遵循RESTful 规则,所有端点均采用POST请求。
规则管理端点
获取所有规则
- 路径:
/api/rules/list
- 方法: POST
- 功能: 获取所有转发规则的列表。
- 路径:
创建新规则
- 路径:
/api/rules/add
- 方法: POST
- 功能: 创建一个新的转发规则。
- 路径:
获取单个规则
- 路径:
/api/rules/{id}/info
- 方法: POST
- 功能: 获取指定ID的转发规则信息。
- 路径:
更新现有规则
- 路径:
/api/rules/{id}/update
- 方法: POST
- 功能: 更新指定ID的转发规则。
- 路径:
删除规则
- 路径:
/api/rules/{id}/delete
- 方法: POST
- 功能: 删除指定ID的转发规则。
- 路径:
启动转发
- 路径:
/api/rules/{id}/start
- 方法: POST
- 功能: 启动指定ID的转发规则。
- 路径:
停止转发
- 路径:
/api/rules/{id}/stop
- 方法: POST
- 功能: 停止指定ID的转发规则。
- 路径:
组管理端点
获取所有组
- 路径:
/api/groups/list
- 方法: POST
- 功能: 获取所有组的列表。
- 路径:
创建新组
- 路径:
/api/groups/add
- 方法: POST
- 功能: 创建一个新的组。
- 路径:
获取单个组
- 路径:
/api/groups/{id}/info
- 方法: POST
- 功能: 获取指定ID的组信息。
- 路径:
更新组
- 路径:
/api/groups/{id}/update
- 方法: POST
- 功能: 更新指定ID的组信息。
- 路径:
删除组
- 路径:
/api/groups/{id}/delete
- 方法: POST
- 功能: 删除指定ID的组。
- 路径:
获取组内的所有规则
- 路径:
/api/groups/{id}/rules
- 方法: POST
- 功能: 获取指定组ID下的所有规则。
- 路径:
健康检查端点
- 路径:
/health
- 方法: GET
- 功能: 检查API服务器的健康状态,无需认证。
版权申明
未标注转载均为本站原创,转载时请以链接形式注明文章出处。 源码软件来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权等不妥之处请联系站长删除。敬请谅解!
暂无评论数据