Klient STUN dla Delphi

Odkryj swój reflexive endpoint za NAT za pomocą typowanego klienta STUN (RFC 8489). Używany jako krok startowy przy zbieraniu kandydatów ICE i WebRTC.

TsgcSTUNClient

Klient STUN — żądania Binding, ekstrakcja XOR-MAPPED-ADDRESS, obsługa MESSAGE-INTEGRITY / FINGERPRINT, timer retransmisji według RFC 8489.

Klasa komponentu

TsgcSTUNClient

Protokół

STUN (RFC 8489)

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Standard / Professional / Enterprise

Wrzuć komponent i zapytaj o adres reflexive

Ustaw host i port serwera STUN, wywołaj SendRequest, a następnie odczytaj aBinding.RemoteIP i aBinding.RemotePort w OnSTUNResponseSuccess.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;

// TFormSTUN zawiera FClient: TsgcSTUNClient oraz 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 i RemotePort zawierają XOR-MAPPED-ADDRESS widziany przez serwer
  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();

Co jest w środku

Typowany klient STUN RFC 8489 z rozszerzeniami message-integrity i fingerprint używanymi przez ICE.

Żądanie/odpowiedź Binding

SendRequest wysyła komunikat Binding STUN 0x0001 do Host / Port, a SendBindingRequest(host, port) odpytuje inny serwer przez to samo gniazdo. Odpowiedź pojawia się w OnSTUNResponseSuccess z już przeanalizowanym XOR-MAPPED-ADDRESS.

Uwierzytelnianie (długo-/krótkoterminowe)

Ustaw STUNOptions.Authentication.Credentials na stauShortTermCredential lub stauLongTermCredential, wypełnij Username i Password, a komponent obliczy MESSAGE-INTEGRITY. Realm i nonce pochodzą z odpowiedzi challenge 401.

Retransmisja

STUN przez UDP wymaga retransmisji na poziomie aplikacji. RetransmissionOptions.RTO i MaxRetries sterują back-offem zgodnym z RFC 8489 §6.2.1, a Enabled wyłącza go, gdy sam sterujesz czasami.

IPv4 / IPv6

XOR-MAPPED-ADDRESS wraca w dowolnej z rodzin adresów. Komponent dekoduje obie i przekazuje Ci formę tekstową w aBinding.RemoteIP, a rodzinę w aBinding.IPVersion.

Jako gatherer kandydatów ICE

Uruchom kilka instancji TsgcSTUNClient przeciw wielu serwerom STUN, aby zebrać server-reflexive kandydatów ICE — jednego na każdy interfejs lokalny.

Podstawowy socket

Używa wewnętrznie TsgcUDPClient, a Transport := stunTCP przełącza na ścieżkę TCP. GetLocalSocketBinding zwraca adres transportowy tego gniazda, czyli bazę według RFC 8445, wspólną dla każdego kandydata zebranego przez to gniazdo.

Specyfikacje i odniesienia

Autorytatywne źródła dla protokołu implementowanego przez ten komponent.

Dokumentacja i dema

Przejdź do dokumentacji komponentu, pobierz gotowy projekt demo i wersję próbną.

Pomoc online — TsgcSTUNClient Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demo — Demos\35.P2P\02.STUN Gotowy do uruchomienia projekt przykładowy. Dołączony do pakietu sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odwołania do źródeł — tylko dla tego komponentu.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy do odkrywania mapowań NAT?

Pobierz bezpłatną wersję próbną i dodaj odkrywanie NAT oparte na STUN do swoich aplikacji Delphi.