Delphi STUN 服务器
在 Delphi 中运行您自己的 STUN(RFC 8489)服务器。通过标准 XOR-MAPPED-ADDRESS 回复响应绑定请求 — 适用于私有网络、本地部署和 ICE 自举场景。
在 Delphi 中运行您自己的 STUN(RFC 8489)服务器。通过标准 XOR-MAPPED-ADDRESS 回复响应绑定请求 — 适用于私有网络、本地部署和 ICE 自举场景。
符合 RFC 8489 标准的 STUN 服务器 — 处理 Binding / Indication 消息,以 XOR-MAPPED-ADDRESS 回复,并可选启用 MESSAGE-INTEGRITY 进行长期身份验证。
TsgcSTUNServer
Windows, macOS, Linux, iOS, Android
Professional / Enterprise
设置 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。
通过 IPVersion 绑定到任一地址族或双栈模式。XOR-MAPPED-ADDRESS 回复使用入站传输的地址族。
LongTermCredentials.StaleNonce 设置一个 nonce 的有效时长。一旦过期,服务器会回应 438 Stale Nonce 并附上一个新的 nonce,这正是 RFC 8489 §9.2 的要求。
OnSTUNRequestSuccess 和 OnSTUNRequestError 将请求以及服务器即将发送的响应交给您,并提供一个可以清除的 var Accept 参数。LogFile 会把原始交互内容写入磁盘。
关于在 Delphi 和 C++ Builder 中运行自托管 STUN 服务器的常见问题。
TsgcSTUNServer 组件,设置 Port(默认 3478)并设置 Active := True。服务器随后会用标准的 XOR-MAPPED-ADDRESS 应答来响应入站 Binding 请求。可选择启用 Authentication 并处理 OnSTUNRequestAuthorization,以要求使用长期凭据的 MESSAGE-INTEGRITY。TsgcSTUNServer 是一个自托管 STUN 服务器,可直接嵌入您自己的 Delphi 或 C++ Builder 应用程序中,因此您无需部署和运行单独的 coturn 实例。它非常适合私有网络、本地 WebRTC 部署以及在您自己控制下的 ICE 引导。