STUN Client

型付き STUN(RFC 8489)クライアントで NAT 背後のリフレクシブエンドポイントを検出します。ICE 候補収集と WebRTC のブートストラップステップとして使用されます。

TsgcSTUNClient

STUN クライアントです。バインディングリクエスト、XOR-MAPPED-ADDRESS の抽出、MESSAGE-INTEGRITY / FINGERPRINT サポート、RFC 8489 に従った再送タイマーを実装しています。

コンポーネントクラス

TsgcSTUNClient

プロトコル

STUN (RFC 8489)

対応プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Standard / Professional / Enterprise

コンポーネントを配置してリフレクシブアドレスを取得する

STUN サーバーのホスト/ポートを設定して SendBindingRequest を呼び出し、OnSTUNMappedAddress から MappedAddress / MappedPort を読み取ってください。

uses
  sgcP2P;

var
  STUN: TsgcSTUNClient;
begin
  STUN := TsgcSTUNClient.Create(nil);
  STUN.Host := 'stun.l.google.com';
  STUN.Port := 19302;

  STUN.OnSTUNMappedAddress := procedure(Sender: TObject;
    const aMappedAddress, aMappedPort: string)
  begin
    Memo1.Lines.Add('public: ' + aMappedAddress + ':' + aMappedPort);
  end;

  STUN.SendBindingRequest;
end;
// uses: sgcP2P
TsgcSTUNClient *STUN = new TsgcSTUNClient(this);
STUN->Host = "stun.l.google.com";
STUN->Port = 19302;
STUN->SendBindingRequest();

主な機能

ICE で使用されるメッセージ整合性とフィンガープリント拡張を備えた型付き RFC 8489 STUN クライアントです。

バインディングリクエスト / レスポンス

SendBindingRequest が STUN 0x0001 メッセージを送信します。レスポンスは解析された XOR-MAPPED-ADDRESS 属性とともに OnSTUNMappedAddress に返されます。

認証(長期 / 短期)

Authentication.UserName / Password を設定するとコンポーネントが MESSAGE-INTEGRITY(HMAC-SHA1 / HMAC-SHA256)を計算します。realm と nonce は 401 チャレンジレスポンスから抽出されます。

再送制御

UDP 上の STUN はアプリケーション層の再送を必要とします。コンポーネントは RFC 8489 §6.2.1 に従った標準バックオフ(RTO / Rc / Rm)を実装しています。

IPv4 / IPv6

XOR-MAPPED-ADDRESS はいずれのアドレスファミリでも返されます。コンポーネントは両方をデコードし、正規テキスト形式で MappedAddress に格納します。

ICE ホスト候補収集器としての使用

複数の TsgcSTUNClient インスタンスを複数の STUN サーバーに向けて実行し、ローカルインターフェースごとにサーバーリフレクシブ ICE 候補を収集します。

基底ソケット

内部で TsgcUDPClient を使用します。ローカルポートバインディングは設定可能で、必要に応じて STUN、ICE、データパスが同じエンドポイントを共有できます。

仕様・参考資料

このコンポーネントが実装するプロトコルの公式ソースです。

ドキュメント・デモ

コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。

オンラインヘルプ — TsgcSTUNClient このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\35.P2P\02.STUN すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。
技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。
ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。

NAT マッピングを検出しませんか?

体験版をダウンロードして、Delphi アプリケーションに STUN ベースの NAT 検出を追加してください。