Delphi STUN 클라이언트

타입이 지정된 STUN(RFC 8489) 클라이언트로 NAT 뒤의 리플렉시브 엔드포인트를 탐색하세요. ICE 후보 수집과 WebRTC의 부트스트랩 단계로 사용됩니다.

TsgcSTUNClient

STUN 클라이언트 — 바인딩 요청, XOR-MAPPED-ADDRESS 추출, MESSAGE-INTEGRITY / FINGERPRINT 지원, RFC 8489에 따른 재전송 타이머.

컴포넌트 클래스

TsgcSTUNClient

프로토콜

STUN (RFC 8489)

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Standard / Professional / Enterprise

컴포넌트를 추가하고 리플렉시브 주소를 요청하세요

STUN 서버 호스트와 포트를 설정하고 SendRequest를 호출한 뒤, OnSTUNResponseSuccess에서 aBinding.RemoteIP와 aBinding.RemotePort를 읽으세요.

uses
  sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;

// TFormSTUN은 FClient: TsgcSTUNClient와 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와 RemotePort에 서버가 확인한 XOR-MAPPED-ADDRESS가 담김
  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();

내부 구성

ICE에서 사용하는 메시지 무결성 및 지문 확장 기능을 갖춘 타입 지정 RFC 8489 STUN 클라이언트입니다.

바인딩 요청 / 응답

SendRequest는 STUN 0x0001 Binding 메시지를 Host / Port로 전송하고, SendBindingRequest(host, port)는 같은 소켓으로 다른 서버에 질의합니다. 응답은 XOR-MAPPED-ADDRESS가 이미 파싱된 상태로 OnSTUNResponseSuccess에 도착합니다.

인증 (장기 / 단기)

STUNOptions.Authentication.CredentialsstauShortTermCredential 또는 stauLongTermCredential로 설정하고 UsernamePassword를 채우면 컴포넌트가 MESSAGE-INTEGRITY를 계산합니다. 렐름과 논스는 401 챌린지에서 가져옵니다.

재전송

UDP를 통한 STUN은 애플리케이션 계층 재전송이 필요합니다. RetransmissionOptions.RTOMaxRetries가 RFC 8489 §6.2.1 백오프를 제어하고, 타이밍을 직접 관리한다면 Enabled로 끌 수 있습니다.

IPv4 / IPv6

XOR-MAPPED-ADDRESS는 두 패밀리 중 하나로 반환됩니다. 컴포넌트는 두 가지를 모두 디코딩해 텍스트 형식을 aBinding.RemoteIP로 전달하고, 패밀리는 aBinding.IPVersion에 담깁니다.

ICE 호스트 수집기로 사용

여러 STUN 서버에 여러 TsgcSTUNClient 인스턴스를 사용하여 서버 리플렉시브 ICE 후보를 수집하세요 — 로컬 인터페이스당 하나씩입니다.

기본 소켓

내부적으로 TsgcUDPClient를 사용하며, Transport := stunTCP로 설정하면 TCP 경로로 전환됩니다. GetLocalSocketBinding은 그 소켓의 전송 주소를 반환하는데, 해당 소켓으로 수집한 모든 후보가 공유하는 RFC 8445의 base입니다.

사양 및 참고문헌

이 컴포넌트가 구현하는 프로토콜의 공식 출처입니다.

문서 및 데모

컴포넌트 레퍼런스로 바로 이동하고, 실행 가능한 데모 프로젝트를 받아보세요.

온라인 도움말 — TsgcSTUNClient 이 컴포넌트의 전체 속성, 메서드 및 이벤트 레퍼런스입니다.
데모 프로젝트 — Demos\35.P2P\02.STUN 실행 가능한 예제 프로젝트입니다. sgcWebSockets 패키지에 포함되어 있습니다.
기술 문서 (PDF) Delphi 및 C++ Builder용 코드 샘플과 기능 설명이 포함된 기술 문서입니다.
사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼입니다.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

NAT 매핑을 탐색할 준비가 되셨나요?

무료 체험판을 다운로드하고 Delphi 애플리케이션에 STUN 기반 NAT 탐색을 추가해 보세요.