Cliente STUN para Delphi

Descubre tu endpoint reflexivo detrás de NAT con un cliente STUN tipado (RFC 8489). Se usa como paso inicial para la recopilación de candidatos ICE y WebRTC.

TsgcSTUNClient

Cliente STUN — Binding requests, extracción de XOR-MAPPED-ADDRESS, soporte de MESSAGE-INTEGRITY / FINGERPRINT, temporizador de retransmisión según RFC 8489.

Clase del componente

TsgcSTUNClient

Protocolo

STUN (RFC 8489)

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Standard / Professional / Enterprise

Coloca el componente, solicita la dirección reflexiva

Configura el host y el puerto del servidor STUN, llama a SendRequest y luego lee aBinding.RemoteIP y aBinding.RemotePort en OnSTUNResponseSuccess.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;

// TFormSTUN contiene FClient: TsgcSTUNClient y 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 y RemotePort llevan la XOR-MAPPED-ADDRESS que vio el servidor
  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();

Qué incluye

Un cliente STUN tipado conforme a RFC 8489 con las extensiones message-integrity y fingerprint usadas por ICE.

Binding request / response

SendRequest envía el mensaje STUN Binding 0x0001 a Host / Port, y SendBindingRequest(host, port) consulta a otro servidor por el mismo socket. La respuesta llega a OnSTUNResponseSuccess con XOR-MAPPED-ADDRESS ya parseado.

Autenticación (long-term / short-term)

Configura STUNOptions.Authentication.Credentials como stauShortTermCredential o stauLongTermCredential, rellena Username y Password, y el componente calcula MESSAGE-INTEGRITY. El realm y el nonce se extraen del desafío 401.

Retransmisión

STUN sobre UDP requiere retransmisión en la capa de aplicación. RetransmissionOptions.RTO y MaxRetries gobiernan el back-off de RFC 8489 §6.2.1, y Enabled lo desactiva cuando gestionas los tiempos tú mismo.

IPv4 / IPv6

XOR-MAPPED-ADDRESS llega en cualquiera de las dos familias. El componente decodifica ambas y te entrega la forma textual en aBinding.RemoteIP, con la familia en aBinding.IPVersion.

Uso como recopilador de hosts ICE

Maneja varias instancias de TsgcSTUNClient contra varios servidores STUN para recopilar candidatos ICE server-reflexive — uno por cada interfaz local.

Socket subyacente

Usa TsgcUDPClient internamente, y Transport := stunTCP cambia a la ruta TCP. GetLocalSocketBinding devuelve la dirección de transporte de ese socket, que es la base RFC 8445 que comparte cada candidato recopilado a través de él.

Especificaciones y referencias

Fuentes autorizadas del protocolo que implementa este componente.

Documentación y demos

Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.

Ayuda en línea — TsgcSTUNClient Referencia completa de propiedades, métodos y eventos de este componente.
Proyecto demo — Demos\35.P2P\02.STUN Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias a fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para descubrir asignaciones NAT?

Descarga la prueba gratuita y añade descubrimiento de NAT basado en STUN a tus aplicaciones Delphi.