Delphi STUN Sunucusu ve İstemcisi

· Bileşenler

STUN (Session Traversal Utilities for NAT), IP ağlarında gerçek zamanlı ses video için kullanılan bir IETF protokolüdür. STUN bir sunucu-istemci protokolüdür; bir STUN sunucusu genellikle hem UDP hem de TCP üzerinde çalışır ve 3478 numaralı bağlantı noktasını dinler.

STUN protokolünün temel amacı, bir NAT'ın arkasında çalışan bir cihazın genel IP'sini ve NAT türünün ne olduğunu keşfetmesini sağlamaktır.

STUN, bir NAT'ın arkasındaki eşler (peer) arasında iletişim kurmak için bir mekanizma sağlar. Eşler, genel IP adresinin ve Bağlantı Noktasının hangisi olduğunu öğrenmek için bir STUN sunucusuna bir istek gönderir. İstemciden sunucuya gönderilen binding istekleri, NAT'lar tarafından ayrılan IP ve bağlantı noktası bağlamalarını belirlemek için kullanılır. STUN istemcisi, STUN sunucusuna bir Binding isteği gönderir, sunucu istemci tarafından kullanılan kaynak IP ve Bağlantı Noktasını inceler ve bu bilgiyi istemciye döndürür.

STUN Sunucusu

TsgcSTUNServer, STUN protokolünü uygulayan ve STUN istemcilerinden gelen binding isteklerini işlemeye olanak tanıyan sunucudur.

STUN sunucusu Kimlik Doğrulama ile veya olmadan yapılandırılabilir, Fingerprint Özniteliğini doğrulayabilir, bir alternatif sunucu gönderebilir ve daha fazlasını yapabilir.

Temel Kullanım

Genellikle stun sunucuları UDP 3478 bağlantı noktasında çalışır ve kimlik doğrulama gerektirmez, bu nedenle bir STUN sunucusu yapılandırmak için dinleme bağlantı noktasını (varsayılan olarak 3478) ayarlayın ve sunucuyu başlatın.

Sunucuyu yapılandırın

STUN sunucusunu başlatmak için Active = True özelliğini ayarlayın.

Yeni bir Delphi STUN Sunucusunun nasıl başlatılacağını gösteren aşağıdaki Delphi Kodunu inceleyin.

oSTUN := TsgcSTUNServer.Create(nil);
oSTUN.Port := 3478;
oSTUN.Active := True; 

Uzun Süreli Kimlik Bilgileri (Long-Term Credentials) 

Genellikle STUN Sunucuları Kimlik Doğrulama olmadan yapılandırılır, bu nedenle herhangi bir STUN istemcisi bir binding isteği gönderebilir ve sunucudan Kimlik Doğrulama olmadan bir yanıt bekleyebilir.

sgcWebSockets STUN Sunucusu Uzun Süreli Kimlik Bilgilerini destekler, böylece TsgcSTUNServer'ı yalnızca Uzun Süreli kimlik bilgisi içeren binding isteklerine izin verecek şekilde yapılandırabilirsiniz.

Bunu yapılandırmak için STUNOptions.Authorization özelliğine erişin ve etkinleştirin.

Ardından LongTermCredentials özelliğine erişin ve etkinleştirin. Varsayılan olarak, bu tür yetkilendirme zaten bir Realm dizesiyle ve 10 dakikalık (= 600 saniye) varsayılan bir StaleNonce değeriyle yapılandırılmıştır.

Uzun Süreli Kimlik Bilgileri etkinleştirilmiş yeni bir Delphi STUN Sunucusunun nasıl oluşturulacağını gösteren aşağıdaki Delphi Kodunu inceleyin.

oSTUN := TsgcSTUNServer.Create(nil);
oSTUN.Port := 3478;
oSTUN.STUNOptions.Authentication.Enabled := True;
oSTUN.STUNOptions.Authentication.LongTermCredentials.Enabled := True;
oSTUN.STUNOptions.Authentication.LongTermCredentials.Realm := 'sgcWebSockets';
oSTUN.STUNOptions.Authentication.LongTermCredentials.StaleNonce := 600;
oSTUN.Active := True;
procedure OnSTUNRequestAuthorization(Sender: TObject; const aRequest: TsgcSTUN_Message; const aUsername, aRealm: string; var Password: string);
begin
  if aUsername = 'my-user' then
    Password := 'my-password';
end; 

STUN İstemcisi 

 TsgcSTUNClient, STUN protokolünü uygulayan ve STUN sunucularına binding istekleri göndermeye olanak tanıyan istemcidir.

Bileşenler, taşıma olarak UDP ve TCP kullanmaya olanak tanır ve taşıma olarak UDP kullanıldığında, yanıt kısa bir süre sonra gelmezse istekleri yeniden göndermek için bir Yeniden İletim mekanizması uygular.

Temel kullanım

Genellikle stun sunucuları UDP 3478 bağlantı noktasında çalışır ve kimlik doğrulama gerektirmez, bu nedenle bir STUN istek binding'i göndermek için, istemcinin nereye bağlanacağını bilmesini sağlamak üzere sunucu özelliklerini doldurun ve bileşenin sunucudan yanıt alacağı olayları işleyin.

Sunucuyu yapılandırın

STUN sunucusuna bir istek binding'i göndermek için SendRequest metodunu çağırın.

Olayları işleyin

Yeni bir Delphi STUN İstemcisinin nasıl oluşturulacağını ve bir STUN Sunucusuna nasıl bağlanılacağını gösteren aşağıdaki Delphi Kodunu inceleyin.




oSTUN := TsgcSTUNClient.Create(nil);
oSTUN.Host := 'stun.sgcwebsockets.com';
oSTUN.Port := 3478;
oSTUN.SendRequest;
procedure OnSTUNResponseSuccess(Sender: TObject; const aMessage: TsgcSTUN_Message; const aBinding: TsgcSTUN_ResponseBinding);
begin
  DoLog('Remote IP: ' + aBinding.RemoteIP + '. Remote Port: ' + IntToStr(aBinding.RemotePort));
end;
procedure OnSTUNResponseError(Sender: TObject; const aMessage: TsgcSTUN_Message; const aError: TsgcSTUN_ResponseError);
begin
  DoLog('Error: ' + IntToStr(aError.Code) + ' ' + aError.Reason);
end; 
});