MaviAyGames | Client Versiyon Kontrolü ve Eski Versiyonların Engellenmesi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 28

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
MIN_CLIENT_VERSION değerini sunucunuzdaki en güncel client versiyonuna göre güncelleyin. İzin verilen exe dosyalarını da kendi sunucu kurulumunuza göre ayarlayın.

input.cpp içindeki Version fonksiyonunu aşağıdaki gibi değiştirin:

Kod:
#include <cstring> #include <cstdio> constexpr const char* MIN_CLIENT_VERSION = "1.2.0"; int CompareVersions(const char* version1, const char* version2) {     int major1, minor1, patch1;     int major2, minor2, patch2;     if (sscanf(version1, "%d.%d.%d", &major1, &minor1, &patch1) != 3)         return -1;     if (sscanf(version2, "%d.%d.%d", &major2, &minor2, &patch2) != 3)         return 1;     if (major1 != major2)         return (major1 < major2) ? -1 : 1;     if (minor1 != minor2)         return (minor1 < minor2) ? -1 : 1;     if (patch1 != patch2)         return (patch1 < patch2) ? -1 : 1;     return 0; } void CInputProcessor::Version(LPCHARACTER ch, const char* c_pData) {     if (!ch || !c_pData)     {         sys_err("Version packet invalid input.");         return;     }     TPacketCGClientVersion* p = reinterpret_cast<TPacketCGClientVersion*>(const_cast<char*>(c_pData));     if (!p)     {         sys_err("Version packet cast failed.");         return;     }     static constexpr const char* ALLOWED_EXECUTABLES[] = {         "metin2.exe",         "metin2_v2.exe",         "Metin2_Test.exe"     };     bool exeAllowed = false;     for (const char* exeName : ALLOWED_EXECUTABLES)     {         if (strcmp(p->filename, exeName) == 0)         {             exeAllowed = true;             break;         }     }     if (!exeAllowed && ch->GetGMLevel() != GM_IMPLEMENTOR)     {         sys_err("Player %s[%d] disconnected: invalid executable '%s'.", ch->GetName(), ch->GetPlayerID(), p->filename);         if (ch->GetDesc())             ch->GetDesc()->SetPhase(PHASE_CLOSE);         return;     }     if (strlen(p->timestamp) == 0 || strlen(p->timestamp) > 64)     {         sys_err("Player %s[%d] disconnected: invalid timestamp.", ch->GetName(), ch->GetPlayerID());         if (ch->GetDesc())             ch->GetDesc()->SetPhase(PHASE_CLOSE);         return;     }     int cmp = CompareVersions(p->timestamp, MIN_CLIENT_VERSION);     if (cmp < 0 && ch->GetGMLevel() != GM_IMPLEMENTOR)     {         sys_err("Player %s[%d] disconnected: outdated client version '%s'. Minimum required '%s'.", ch->GetName(), ch->GetPlayerID(), p->timestamp, MIN_CLIENT_VERSION);         if (ch->GetDesc())             ch->GetDesc()->SetPhase(PHASE_CLOSE);         return;     }     const char* ip = (ch->GetDesc()) ? ch->GetDesc()->GetHostName() : "UnknownIP";     sys_log(0, "VERSION: Player='%s', IP='%s', Version='%s', EXE='%s'", ch->GetName(), ip, p->timestamp, p->filename);     if (ch->GetDesc())         ch->GetDesc()->SetClientVersion(p->timestamp); }

Kod:
## Client Versiyon ve Exe Adı Gönderimi - Ek Güncelleme Sunucu tarafında versiyon ve executable dosya ismi doğrulaması için paket ve validasyonlar eklendi. Client tarafında da bu bilgileri göndermek için aşağıdaki minimal eklemeyi yapmanız gerekmektedir. --- ### 1. Versiyon Paketi Tanımı (version.h) ```cpp struct TPacketCGClientVersion {     char filename[32];     char timestamp[64]; }; void SendClientVersionPacket() {     TPacketCGClientVersion packet = {};     strncpy(packet.filename, "metin2.exe", sizeof(packet.filename) - 1);     strncpy(packet.timestamp, "1.2.0", sizeof(packet.timestamp) - 1);     SendPacket((const char*)&packet, sizeof(packet)); } void OnLoginSuccess() {     SendClientVersionPacket(); }

MaviAyGames | Client Versiyon Kontrolü ve Eski Versiyonların Engellenmesi

Metin2 özel sunucularında güvenliği artırmak ve kullanıcı deneyimini optimize etmek adına client versiyon kontrol mekanizması son derece kritik öneme sahiptir.[/BR][/BR]Bu makalede, MaviAyGames özel sunucusu üzerinde nasıl client versiyon kontrolü yapılacağına ve eski sürümlerin nasıl engelleneceğine dair detaylı bilgi verilecektir.

Client versiyon kontrolü, oyuncuların güncel olmayan bir istemci sürümüyle giriş yapmalarını engeller ve sunucu tarafında güvenlik açıklarının kapatılmasını sağlar.

Versiyon Kontrolünün Sunucu Tarafında Uygulanması

Sunucu tarafında versiyon kontrolü yapabilmek için öncelikle client tarafında bir versiyon numarası tanımlanmalıdır. Bu versiyon numarası genellikle clientinfo.py veya system.py gibi dosyalarda yer alır. Sunucu tarafında ise game server ile bu versiyon karşılaştırılır.

Örneğin, client tarafından gönderilen versiyon numarası sunucuda tanımlı olanla eşleşmezse, oyuncu oturum açamaz ve belirlenen mesajla bilgilendirilir.

Python ve C++ Kombinasyonuyla Versiyon Kontrolü

Metin2 özel sunucularında genellikle hem C++ hem de Python kullanılır. Versiyon kontrol mekanizması da bu iki dil arasında entegre çalışabilir.

Python tarafında root dizininde yer alan uiscript üzerinden versiyon kontrolü yapılabilirken, C++ tarafında game server src içinde bir fonksiyon tanımlanarak versiyon karşılaştırması sağlanabilir.

Eski Versiyonların Engellenmesi Neden Gerekli?

Güncel olmayan client sürümleri, sunucu tarafındaki güvenlik açıklarından yararlanabilir. Bu durum, hileli girişimleri teşvik eder ve PvP sistemlerinde adil oyun ortamını bozar.

Bu nedenle, eski versiyonları otomatik olarak engellemek, hem sunucu güvenliğini artırır hem de oyuncuların güncel sürümleri kullanmalarını sağlar.

Martysama ve Metin2Dev ile Entegrasyon

Martysama gibi popüler Metin2 development araçları, versiyon kontrol mekanizmalarını daha kolay entegre etmenizi sağlar. Metin2Dev sistemleriyle birlikte bu kontroller daha da gelişmiş seviyeye taşınabilir.

Bu tür sistemlerde pack ve server src dosyaları üzerinde yapılacak küçük değişikliklerle büyük güvenlik kazanımları sağlanabilir.

Sonuç

Client versiyon kontrolü, Metin2 özel sunucularında güvenlik ve kullanıcı deneyimi açısından hayati bir öneme sahiptir. Doğru uygulandığında, eski sürümlere izin vermeyerek hile riskini azaltır ve sunucu bütünlüğünü korur.

MaviAyGames özel sunucusunda bu kontrolün uygulanması, hem C++ hem de Python bilgisi gerektiren, ancak oldukça etkili bir yöntemdir.


MaviAyGames | Client Version Control and Blocking Old Versions

In private Metin2 servers, client version control is extremely critical for enhancing security and optimizing user experience.[/BR][/BR]In this article, detailed information will be provided on how to perform client version control on the MaviAyGames private server and how older versions can be blocked.

Client version control prevents players from logging in with outdated client versions and helps close security vulnerabilities on the server side.

Implementing Version Control on the Server Side

To implement version control on the server side, a version number must first be defined on the client side. This version number typically appears in files such as clientinfo.py or system.py. On the server side, this version is compared with the game server.

For example, if the version number sent by the client does not match the one defined on the server, the player cannot log in and receives a notification message.

Version Control Using Python and C++ Combination

In Metin2 private servers, both C++ and Python are commonly used. The version control mechanism can operate seamlessly between these two languages.

Version control can be handled via uiscript located in the root directory on the Python side, while on the C++ side, a function can be defined within the game server src to compare versions.

Why Is Blocking Outdated Versions Necessary?

Outdated client versions may exploit security vulnerabilities on the server side. This encourages cheating and disrupts fair gameplay in PvP systems.

Therefore, automatically blocking old versions increases server security and ensures that players use updated versions.

Integration with Martysama and Metin2Dev

Popular Metin2 development tools like Martysama allow easier integration of version control mechanisms. Together with Metin2Dev systems, these controls can reach more advanced levels.

With small modifications in pack and server src files, significant security improvements can be achieved in such systems.

Conclusion

Client version control is vital for security and user experience in Metin2 private servers. When properly implemented, it reduces cheat risks by disallowing older versions and maintains server integrity.

Implementing this control on the MaviAyGames private server requires knowledge of both C++ and Python, but it is a highly effective method.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt