Delphi STUN 服务器

在 Delphi 中运行您自己的 STUN(RFC 8489)服务器。通过标准 XOR-MAPPED-ADDRESS 回复响应绑定请求 — 适用于私有网络、本地部署和 ICE 自举场景。

TsgcSTUNServer

符合 RFC 8489 标准的 STUN 服务器 — 处理 Binding / Indication 消息,以 XOR-MAPPED-ADDRESS 回复,并可选启用 MESSAGE-INTEGRITY 进行长期身份验证。

组件类

TsgcSTUNServer

支持平台

Windows, macOS, Linux, iOS, Android

版本

Professional / Enterprise

拖放组件、设置端口,即可获得 STUN 端点

设置 Port(默认 3478),Active := True — 服务器即可以标准 RFC 8489 XOR-MAPPED-ADDRESS 回复响应绑定请求。

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormSTUNServer 持有 FServer: TsgcSTUNServer 和事件处理程序

procedure TFormSTUNServer.StartServer;
begin
  FServer := TsgcSTUNServer.Create(nil);
  FServer.Port := 3478;

  // 可选:长期凭据
  FServer.STUNOptions.Authentication.Enabled := True;
  FServer.STUNOptions.Authentication.LongTermCredentials.Enabled := True;
  FServer.STUNOptions.Authentication.LongTermCredentials.Realm :=
    'example.com';

  FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;

  FServer.Active := True;
end;

procedure TFormSTUNServer.OnSTUNRequestAuthorization(Sender: TObject;
  const aRequest: TsgcSTUN_Message;
  const aUsername, aRealm: string;
  var Password: string);
begin
  // 返回该用户的密码,为空表示拒绝该请求
  Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcSTUNServer *Server = new TsgcSTUNServer(this);
Server->Port = 3478;
Server->STUNOptions->Authentication->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Realm = "example.com";
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;

内部功能

自托管 STUN 服务器 — 适合本地 WebRTC 部署和私有云测试。

绑定请求处理器

以 XOR-MAPPED-ADDRESS、MAPPED-ADDRESS(传统)和 FINGERPRINT 响应入站绑定请求 — 符合标准 RFC 8489 回复格式。

长期/短期身份验证

切换 STUNOptions.Authentication.Enabled 以要求 MESSAGE-INTEGRITY,并在 LongTermCredentials.Realm 上设置 realm。OnSTUNRequestAuthorization 将用户名和 realm 交给您,由您返回匹配的密码。

由您控制的响应属性

STUNOptions.BindingAttributes 用于开启或关闭旧版 RFC 3489 的 MAPPED-ADDRESS、OTHER-ADDRESS、RESPONSE-ORIGIN 和 SOURCE-ADDRESS,而 AlternateServer 会以您指定的服务器回应 300 Try Alternate。

IPv4 / IPv6

通过 IPVersion 绑定到任一地址族或双栈模式。XOR-MAPPED-ADDRESS 回复使用入站传输的地址族。

过期 nonce 轮换

LongTermCredentials.StaleNonce 设置一个 nonce 的有效时长。一旦过期,服务器会回应 438 Stale Nonce 并附上一个新的 nonce,这正是 RFC 8489 §9.2 的要求。

诊断

OnSTUNRequestSuccessOnSTUNRequestError 将请求以及服务器即将发送的响应交给您,并提供一个可以清除的 var Accept 参数。LogFile 会把原始交互内容写入磁盘。

规范与参考资料

该组件实现的协议权威来源。

文档与示例

直达组件参考文档、获取即用示例项目并下载试用版。

在线帮助 — TsgcSTUNServer 该组件的完整属性、方法和事件参考。
示例项目 — Demos\35.P2P\02.STUN 即用示例项目,包含在 sgcWebSockets 包中 — 请从下方下载试用版。
技术文档(PDF) 功能介绍、快速入门、Delphi 与 C++ Builder 代码示例及原始参考资料 — 仅限此组件。
用户手册(PDF) 涵盖库中每个组件的综合手册。

STUN 服务器常见问题

关于在 Delphi 和 C++ Builder 中运行自托管 STUN 服务器的常见问题。

放置一个 TsgcSTUNServer 组件,设置 Port(默认 3478)并设置 Active := True。服务器随后会用标准的 XOR-MAPPED-ADDRESS 应答来响应入站 Binding 请求。可选择启用 Authentication 并处理 OnSTUNRequestAuthorization,以要求使用长期凭据的 MESSAGE-INTEGRITY。
它按照 RFC 8489 实现 STUN,处理 Binding 和 Indication 消息,并用 XOR-MAPPED-ADDRESS、旧式 MAPPED-ADDRESS 和 FINGERPRINT 进行应答。它支持 IPv4 和 IPv6、可选的 STUN-over-TLS,并参考 RFC 5780 进行 NAT 行为发现。
不需要。TsgcSTUNServer 是一个自托管 STUN 服务器,可直接嵌入您自己的 Delphi 或 C++ Builder 应用程序中,因此您无需部署和运行单独的 coturn 实例。它非常适合私有网络、本地 WebRTC 部署以及在您自己控制下的 ICE 引导。
STUN 服务器是 sgcWebSockets Enterprise 版本的一部分,支持从 Delphi 7 到最新 Delphi 版本以及相应的 C++ Builder 版本,可在 Windows、macOS、Linux、iOS 和 Android 上运行。下载免费试用版,在您自己的项目中搭建 STUN 端点。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好运行您自己的 STUN 服务器了吗?

下载免费试用版,在 Delphi 中搭建 STUN 端点。