Delphi STUN クライアント
型付き STUN(RFC 8489)クライアントで NAT 背後のリフレクシブエンドポイントを検出します。ICE 候補収集と WebRTC のブートストラップステップとして使用されます。
型付き STUN(RFC 8489)クライアントで NAT 背後のリフレクシブエンドポイントを検出します。ICE 候補収集と WebRTC のブートストラップステップとして使用されます。
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 クライアントです。
SendRequest は STUN の 0x0001 Binding メッセージを Host / Port へ送信します。SendBindingRequest(host, port) を使えば、同じソケットで別のサーバーに問い合わせできます。レスポンスは、解析済みの XOR-MAPPED-ADDRESS とともに OnSTUNResponseSuccess に到達します。
STUNOptions.Authentication.Credentials に stauShortTermCredential または stauLongTermCredential を設定し、Username と Password を指定すると、コンポーネントが MESSAGE-INTEGRITY を計算します。realm と nonce は 401 チャレンジから取得されます。
UDP 上の STUN はアプリケーション層の再送を必要とします。RetransmissionOptions.RTO と MaxRetries が RFC 8489 §6.2.1 のバックオフを制御し、タイミングを自分で制御する場合は Enabled でオフにできます。
XOR-MAPPED-ADDRESS はいずれのアドレスファミリでも返されます。コンポーネントは両方をデコードし、テキスト形式を aBinding.RemoteIP に、アドレスファミリを aBinding.IPVersion に格納します。
複数の TsgcSTUNClient インスタンスを複数の STUN サーバーに向けて実行し、ローカルインターフェースごとにサーバーリフレクシブ ICE 候補を収集します。
内部で TsgcUDPClient を使用します。Transport := stunTCP を設定すると TCP 経路に切り替わります。GetLocalSocketBinding はそのソケットのトランスポートアドレスを返します。これは、そのソケットで収集したすべての候補が共有する RFC 8445 のベースです。
コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。
| オンラインヘルプ — TsgcSTUNClient このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\35.P2P\02.STUN すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。 | 開く | |
| 技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く |