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.

TsgcSTUNClient

STUN-Client — Binding-Requests, XOR-MAPPED-ADDRESS-Extraktion, MESSAGE-INTEGRITY-/FINGERPRINT-Unterstützung, Retransmission-Timer gemäß RFC 8489.

Komponentenklasse

TsgcSTUNClient

Protokoll

STUN (RFC 8489)

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Standard / Professional / Enterprise

Komponente platzieren, reflexive Adresse anfordern

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();

Was steckt drin

Ein typisierter RFC-8489-STUN-Client mit den von ICE genutzten Message-Integrity- und Fingerprint-Erweiterungen.

Binding-Request / -Response

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.

Authentifizierung (long-term / short-term)

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.

Retransmission

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.

IPv4 / IPv6

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.

Einsatz als ICE-Host-Gatherer

Betreibe mehrere TsgcSTUNClient-Instanzen gegen verschiedene STUN-Server, um server-reflexive ICE-Kandidaten zu sammeln — einen pro lokalem Interface.

Zugrundeliegender Socket

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.

Spezifikationen & Referenzen

Maßgebliche Quellen für das Protokoll, das diese Komponente implementiert.

Dokumentation & Demos

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.
Demo-Projekt — Demos\35.P2P\02.STUN Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, NAT-Zuordnungen zu ermitteln?

Lade die kostenlose Testversion herunter und ergänze deine Delphi-Anwendungen um STUN-basierte NAT-Erkennung.