Delphi STUN Client
Ermittle deinen reflexiven Endpunkt hinter NAT mit einem typisierten STUN-Client (RFC 8489). Wird als Bootstrap-Schritt für die ICE-Kandidatensammlung und WebRTC verwendet.
Ermittle deinen reflexiven Endpunkt hinter NAT mit einem typisierten STUN-Client (RFC 8489). Wird als Bootstrap-Schritt für die ICE-Kandidatensammlung und WebRTC verwendet.
STUN-Client — Binding-Requests, XOR-MAPPED-ADDRESS-Extraktion, MESSAGE-INTEGRITY-/FINGERPRINT-Unterstützung, Retransmission-Timer gemäß RFC 8489.
TsgcSTUNClient
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
Setze Host und Port des STUN-Servers, rufe SendRequest auf und lies anschließend aBinding.RemoteIP und aBinding.RemotePort in OnSTUNResponseSuccess.
uses
sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;
// TFormSTUN enthält FClient: TsgcSTUNClient und 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 und RemotePort enthalten die XOR-MAPPED-ADDRESS, die der Server gesehen hat
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();
Ein typisierter RFC-8489-STUN-Client mit den von ICE genutzten Message-Integrity- und Fingerprint-Erweiterungen.
SendRequest sendet die STUN-Binding-Nachricht 0x0001 an Host / Port, und SendBindingRequest(host, port) fragt über denselben Socket einen anderen Server ab. Die Antwort trifft bei OnSTUNResponseSuccess ein, mit bereits geparster XOR-MAPPED-ADDRESS.
Setze STUNOptions.Authentication.Credentials auf stauShortTermCredential oder stauLongTermCredential, fülle Username und Password, und die Komponente berechnet MESSAGE-INTEGRITY. Realm und Nonce stammen aus der 401-Challenge.
STUN über UDP erfordert eine Retransmission auf Anwendungsebene. RetransmissionOptions.RTO und MaxRetries steuern das Back-off gemäß RFC 8489 §6.2.1, und Enabled schaltet es ab, wenn du das Timing selbst übernimmst.
XOR-MAPPED-ADDRESS kommt in beiden Familien zurück. Die Komponente dekodiert beide und übergibt dir die Textform in aBinding.RemoteIP, die Familie steht in aBinding.IPVersion.
Betreibe mehrere TsgcSTUNClient-Instanzen gegen verschiedene STUN-Server, um server-reflexive ICE-Kandidaten zu sammeln — einen pro lokalem Interface.
Verwendet intern TsgcUDPClient, und Transport := stunTCP wechselt auf den TCP-Pfad. GetLocalSocketBinding liefert die Transportadresse dieses Sockets, also die Basis nach RFC 8445, die alle darüber gesammelten Candidates teilen.
Springe direkt zur Komponentenreferenz, hole dir das sofort lauffähige Demo-Projekt und lade die Testversion herunter.
| Online-Hilfe — TsgcSTUNClient Vollständige Referenz zu Eigenschaften, Methoden und Ereignissen dieser Komponente. | Öffnen | |
| Demo-Projekt — Demos\35.P2P\02.STUN Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter. | Öffnen | |
| Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente. | Öffnen | |
| Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt. | Öffnen |