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.
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.
Cliente STUN — Binding requests, extracción de XOR-MAPPED-ADDRESS, soporte de MESSAGE-INTEGRITY / FINGERPRINT, temporizador de retransmisión según RFC 8489.
TsgcSTUNClient
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
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();
Un cliente STUN tipado conforme a RFC 8489 con las extensiones message-integrity y fingerprint usadas por ICE.
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.
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.
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.
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.
Maneja varias instancias de TsgcSTUNClient contra varios servidores STUN para recopilar candidatos ICE server-reflexive — uno por cada interfaz local.
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.
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. | Abrir | |
| Proyecto demo — Demos\35.P2P\02.STUN Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo. | Abrir | |
| 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. | Abrir | |
| Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca. | Abrir |