什么是游戏盾
网络堡垒(NetGuard)是可私有化部署的游戏盾,提供源码级维护与快速应急响应。具备无限防御、零误封能力,可有效抵御 UDP/TCP 洪水、DDoS 及 CC 攻击。支持在自有服务器或指定机房部署,确保防护链路及业务数据自主可控。具备弹性扩展与流量加密能力,保障 App 业务稳定、低延迟运行。
适用客户
- App 运营方: 为自己运营的 App 及其内嵌业务建设专属防护环境;
- 游戏盾服务商: 为 App 运营方搭建并交付完整的防护系统。
适用场景
- 手游、端游和实时互动等各类 App;
- 基于 TCP/UDP 的各类 App 通信(含 HTTP API);
- 自有机房、公有云和混合云中的专属部署;
- 需要独立节点、域名、配置服务和管理后台的业务。
核心能力
无视攻击
分布式网关承接攻击流量,客户端入口彼此分散。网关、防护节点和线路可持续增加,按攻击规模扩大整体防御能力。
无感重连
节点异常或线路质量下降时,客户端自动切换到可用节点并保持业务连接,减少掉线与重复登录。
源站隐藏
客户端只连接动态网关,业务源站只接受指定盾机访问,降低源站暴露和被绕过的风险。
智能路由
按国家、地区和运营商分配候选节点,检测实际连接质量,优先连接速度更快、更稳定的线路。
连接管控
按实例、来源 IP、设备和并发规模管理连接资源,帮助源站保持稳定运行。
真实 IP
私有部署可按项目安装真实 IP 插件,为业务日志、地域分析和访问控制提供客户端地址信息。
平台支持
| 客户端 | 最低版本 | 接入形式 |
|---|---|---|
| Windows 应用 | Windows 7 | EXE / DLL |
| Android | Android 4.4(API 19) | AAR |
| iOS / iPadOS | iOS 12 | 静态库 |
示例项目
示例仓库提供 Windows、Android、iOS 和 UniApp 的接入示例,可用于了解 SDK 初始化与基础转发流程。示例仓库用于演示,实际项目请以网络堡垒交付版本和说明为准。
Windows 接入
Windows SDK 提供 Shield.exe 和 Shield.dll,最低支持 Windows 7。Windows 应用可选择零代码启动或动态库同步接入:
零代码接入
将 Shield.exe、Shield.dll 和业务程序放在同一目录,创建 Shield.ini,填写 AppId 与业务主程序路径后运行 Shield.exe:
[Shield]
AppID = YOUR_APP_ID
; 将 YOUR_APP_ID 替换为你自己的 AppId
AppExe = YOUR_APP.exe
; 将 YOUR_APP.exe 替换为你的业务程序路径
AppExe 支持相对路径或绝对路径。此方式适合不希望修改业务代码的 Windows 应用。
动态库接入
/* 建议在独立进程中加载此动态库。
* 直接加载到业务进程可能导致业务进程崩溃
* 或无法连接服务器
*/
// 1. 声明 SDK 导出的函数
extern "C" {
typedef int (__stdcall *InitFunc)(char *, char *);
}
// 2. 在适当时机加载动态库并初始化
HMODULE mod = LoadLibraryA("Shield.dll");
if (!mod)
return; // 找不到 Shield.dll
InitFunc init = (InitFunc)GetProcAddress(mod, "Init");
if (!init)
return; // 找不到 Init 函数
// 将 YOUR_APP_ID 替换为你自己的 AppId
int result = init(NULL, "YOUR_APP_ID");
if (result != 0)
return; // 返回非零值表示初始化失败
// 初始化成功后从这里继续执行
初始化成功后 SDK 服务线程仍在运行,应用应保持动态库已加载直到进程退出。需要与业务进程隔离时,可以使用独立进程运行 SDK;同一 Windows 应用包含多个业务进程时,也应由该独立 SDK 进程提供本地服务。
Android 接入
Android SDK 以 AAR 交付,最低支持 Android 4.4(API 19)。把 AAR 放入主工程的 app/libs:
android {
sourceSets.main {
jniLibs.srcDirs = ['libs']
}
}
dependencies {
implementation files('libs/libshield.aar')
}
在应用启动阶段同步初始化:
// 将 YOUR_APP_ID 替换为你自己的 AppId
int result = Shield.Init(null, "YOUR_APP_ID");
if (result != 0) {
// 返回非零值表示初始化失败
}
初始化可能执行网络请求,应由应用根据自身启动流程选择合适的调用线程。
iOS 接入
iOS SDK 提供 Shield.h 和 libshield.a,最低支持 iOS/iPadOS 12,并需要按交付说明链接所需系统框架:
// 1. 首先将 libshield.a 加入 iOS 工程,否则编译会失败。
// 2. 引入头文件
#import "Shield.h"
// 3. 在适当时机初始化
Shield *shield = [Shield getInstance];
// 将 YOUR_APP_ID 替换为你自己的 AppId
NSInteger result = [shield Init:nil key:@"YOUR_APP_ID"];
if (result != 0) {
// 返回非零值表示初始化失败
}
初始化失败
下面列出初始化函数的常见返回值。
| 返回值 | 含义 |
|---|---|
| 0 | 初始化成功 |
| 1 | AppId 为空或为 null |
| 3 | 无法取得配置或没有设置转发规则 |
| 4 | 无法监听本地地址或端口已被占用 |
| 9 | 保留参数不符合接口要求 |
不同交付版本可能增加平台错误码,请以随版本提供的头文件和说明为准。