Delphi STUN 客户端

使用类型化的 STUN(RFC 8489)客户端发现 NAT 后的反射端点。用作 ICE 候选收集和 WebRTC 的引导步骤。

TsgcSTUNClient

STUN 客户端 — 绑定请求、XOR-MAPPED-ADDRESS 提取、MESSAGE-INTEGRITY / FINGERPRINT 支持,按 RFC 8489 的重传计时器。

组件类

TsgcSTUNClient

平台

Windows, macOS, Linux, iOS, Android

版本

Standard / Professional / Enterprise

放置组件,查询反射地址

设置 STUN 服务器主机和端口,调用 SendRequest,然后在 OnSTUNResponseSuccess 中读取 aBinding.RemoteIP 和 aBinding.RemotePort。

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;

// TFormSTUN 持有 FClient: TsgcSTUNClient 和 FLog: TStringList

procedure TFormSTUN.Discover;
begin
  FClient := TsgcSTUNClient.Create(nil);
  FClient.Host := 'stun.l.google.com';
  FClient.Port := 19302;

  FClient.OnSTUNResponseSuccess := OnSTUNResponseSuccess;

  FClient.SendRequest;
end;

procedure TFormSTUN.OnSTUNResponseSuccess(Sender: TObject;
  const aSocket: TsgcSocketConnection;
  const aMessage: TsgcSTUN_Message;
  const aBinding: TsgcSTUN_ResponseBinding);
begin
  // RemoteIP 和 RemotePort 携带服务器看到的 XOR-MAPPED-ADDRESS
  FLog.Add('public: ' + aBinding.RemoteIP + ':' +
    IntToStr(aBinding.RemotePort));
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcSTUNClient *Client = new TsgcSTUNClient(this);
Client->Host = "stun.l.google.com";
Client->Port = 19302;
Client->OnSTUNResponseSuccess = OnSTUNResponseSuccess;
Client->SendRequest();

内部功能

具有 ICE 使用的消息完整性和指纹扩展的类型化 RFC 8489 STUN 客户端。

绑定请求/响应

SendRequestHost / Port 发送 STUN 0x0001 绑定消息,而 SendBindingRequest(host, port) 通过同一套接字查询另一台服务器。响应在 OnSTUNResponseSuccess 中到达,其中的 XOR-MAPPED-ADDRESS 已解析完毕。

认证(长期/短期)

STUNOptions.Authentication.Credentials 设置为 stauShortTermCredentialstauLongTermCredential,填写 UsernamePassword,组件即会计算 MESSAGE-INTEGRITY。realm 和 nonce 来自 401 质询响应。

重传

STUN over UDP 需要应用层重传。RetransmissionOptions.RTOMaxRetries 驱动 RFC 8489 §6.2.1 规定的退避,而当您希望自行控制时序时,可用 Enabled 将其关闭。

IPv4 / IPv6

XOR-MAPPED-ADDRESS 可能以任一地址族返回。组件对两者都能解码,并在 aBinding.RemoteIP 中提供文本形式,地址族则位于 aBinding.IPVersion 中。

用作 ICE 主机收集器

针对多个 STUN 服务器驱动多个 TsgcSTUNClient 实例,为每个本地接口收集服务器反射 ICE 候选。

底层套接字

内部使用 TsgcUDPClient,而 Transport := stunTCP 可切换到 TCP 路径。GetLocalSocketBinding 返回该套接字的传输地址,也就是通过它收集的每个候选所共享的 RFC 8445 基地址。

规范与参考

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

文档与演示

直达组件参考,获取可立即运行的演示项目,并下载试用版。

在线帮助 — TsgcSTUNClient 本组件的完整属性、方法和事件参考。
演示项目 — Demos\35.P2P\02.STUN 可立即运行的示例项目,随 sgcWebSockets 包一起提供 — 请从下方下载试用版。
技术文档 (PDF) 仅涵盖本组件的功能、快速入门、Delphi 和 C++ Builder 代码示例及主要参考来源。
用户手册 (PDF) 涵盖库中每个组件的综合手册。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好发现 NAT 映射了吗?

下载免费试用版,为您的 Delphi 应用程序添加基于 STUN 的 NAT 发现功能。