Cliente STUN para Delphi

Descubra seu endpoint reflexivo atrás do NAT com um cliente STUN tipado (RFC 8489). Usado como etapa inicial para coleta de candidatos ICE e WebRTC.

TsgcSTUNClient

Cliente STUN — Binding requests, extração de XOR-MAPPED-ADDRESS, suporte a MESSAGE-INTEGRITY / FINGERPRINT, timer de retransmissão conforme RFC 8489.

Classe do componente

TsgcSTUNClient

Protocolo

STUN (RFC 8489)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Standard / Professional / Enterprise

Adicione o componente e solicite o endereço reflexivo

Defina o host e a porta do servidor STUN, chame SendRequest e depois leia aBinding.RemoteIP e aBinding.RemotePort em OnSTUNResponseSuccess.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;

// TFormSTUN mantém FClient: TsgcSTUNClient e 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 e RemotePort trazem o XOR-MAPPED-ADDRESS que o servidor viu
  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();

O que está incluído

Um cliente STUN tipado (RFC 8489) com as extensões message-integrity e fingerprint utilizadas pelo ICE.

Binding request / response

SendRequest envia a mensagem Binding STUN 0x0001 para Host / Port, e SendBindingRequest(host, port) consulta outro servidor pelo mesmo socket. A resposta chega em OnSTUNResponseSuccess com o XOR-MAPPED-ADDRESS já parseado.

Autenticação (long-term / short-term)

Defina STUNOptions.Authentication.Credentials como stauShortTermCredential ou stauLongTermCredential, preencha Username e Password, e o componente calcula o MESSAGE-INTEGRITY. O realm e o nonce vêm da resposta de challenge 401.

Retransmissão

STUN sobre UDP exige retransmissão na camada de aplicação. RetransmissionOptions.RTO e MaxRetries comandam o back-off da RFC 8489 §6.2.1, e Enabled o desliga quando você mesmo controla os tempos.

IPv4 / IPv6

O XOR-MAPPED-ADDRESS retorna em qualquer família. O componente decodifica ambas e entrega a você a forma textual em aBinding.RemoteIP, com a família em aBinding.IPVersion.

Como coletor ICE

Use múltiplas instâncias de TsgcSTUNClient contra vários servidores STUN para coletar candidatos ICE server-reflexive — um por interface local.

Socket subjacente

Usa TsgcUDPClient internamente, e Transport := stunTCP alterna para o caminho TCP. GetLocalSocketBinding retorna o endereço de transporte desse socket, que é a base da RFC 8445 compartilhada por todo candidato coletado através dele.

Especificações & referências

Fontes oficiais do protocolo implementado por este componente.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcSTUNClient Referência completa de propriedades, métodos e eventos deste componente.
Projeto de Demo — Demos\35.P2P\02.STUN Projeto de exemplo pronto para executar. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Descobrir Mapeamentos NAT?

Baixe o trial gratuito e adicione descoberta NAT via STUN às suas aplicações Delphi.