Metin2 P2P Açığını Kapatmak

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
11.929
Çözümler
564
Beğeni
13.492
Puan
5.915
Ticaret Puanı
2
Merhaba arkadaşlar,
Hala bazı paylaşılan fileslerde p2p açığı bulunuyor. Bunu nasıl kapatacağınızı anlatacağım. Kendim kullandığım ve başarılı bi koruma sağladığından dolayı paylaşıyorum.
Bunu yapmak için Metin2 kaynak kodlarınızın olması gerekecek.

game/desc_p2p.cpp dosyasını açın ve importların bulunduğu kısımı bunu ekleyin. (Sizde varsa eklemeyin)
C++:
Genişlet Daralt Kopyala
#include "config.h"

Aratın;
C++:
Genişlet Daralt Kopyala
    m_iMinInputBufferLen = 1024 * 1024;

Altına ekleyiniz;
C++:
Genişlet Daralt Kopyala
    if (strcmp(host, g_szPublicIP))
    {
        sys_log(0, "SYSTEM: new p2p connection from [%s] to [%s] fd: %d BLOCKED", host, g_szPublicIP, m_sock);
        SetPhase(PHASE_CLOSE);
        return true;
    }


game/input.cpp açın ve aratın;
C++:
Genişlet Daralt Kopyala
    if (bHeader == HEADER_CG_TEXT)
    {

Altına ekleyiniz;
C++:
Genişlet Daralt Kopyala
        if (IsEmptyAdminPage() || !IsAdminPage(inet_ntoa(d->GetAddr().sin_addr))) // block if adminpage is not set or if not admin
        {
            sys_log(0, "SOCKET_CMD: BLOCK FROM(%s)", d->GetHostName());
            return -1;
        }

db/src/PeerBase.cpp açın ve aratın;
C++:
Genişlet Daralt Kopyala
    if ((m_fd = socket_accept(fd_accept, &peer)) == INVALID_SOCKET)
    {
        Destroy();
        return false;
    }

Altına ekleyiniz;
C++:
Genişlet Daralt Kopyala
    // refuse if remote host != localhost (only the same machine must be able to connect in here)
    std::string targetIP = inet_ntoa(peer.sin_addr);
    if (targetIP.rfind("127.0.0.1", 0) && targetIP.rfind("192.168.", 0) && targetIP.rfind("10.", 0))
    {
        sys_log(0, "BLOCK CONNECTION FROM %s", inet_ntoa(peer.sin_addr));
        Destroy();
        return false;
    }


Not: Bunları yaptıktan sonra bu konuda anlatılanları uygulayınız. Metin2 PvP Sunucu Güvenliği İçin Config Dosyasına Eklememiz Gerekenler

Açığın kapanıp kapanmadığını test etmek için ekteki dosyayı indirip deneyebilirsiniz. İyi çalışmalar dilerim.

Kaynaklar
Bu fixi yazan kişinin web sitesi:
Linkleri görebilmek için giriş yap veya kayıt ol.
 

Dosya Eklentileri

Son düzenleme:
Yararlı bir paylaşım, teşekkür ederim. Bu fix sadece martysama için mi geçerli acaba ?
 
Hayır her sourceye yapabilirsiniz. Sadece bunu yazan kişi o. Kaynak kısmına ekledim her şeyi
 
Ekteki dosyayı indirip test edebilirsiniz yazışsınız fakat dosyayı göremedim
 
Dosyayı seneler önce indirmiştim. Orijinal paylaşan yerin linkini eklemek için arama yapıyordum ama bulamadım. O ara eklemeyi unutmuşum. Ekledim şimdi :D
 
Herhangi bir yerden p2p bağlantısı aracılığı ile serverin kanallarını kapatabilir, oyuncuya dc attırabilir, gm duyuru atılabilir, serverin event flaglarını değiştirebilir vs.

Genelde kanalları düşürmek için kullanıyorlar. Bu kodlarda dışarıdan gelen bağlantıları engelliyor. Sadece izin verilen ve sunucu içerisindeki bağlantılara izin veriyor. Ekte verdiğim script bu işe yarıyor. İndirip kendi serveriniz üzerinde deneyebilirsiniz. Eğer açık varsa başarılı bi şekilde kanalları kapatacaktır.
 
Herhangi bir yerden p2p bağlantısı aracılığı ile serverin kanallarını kapatabilir, oyuncuya dc attırabilir, gm duyuru atılabilir, serverin event flaglarını değiştirebilir vs.

Genelde kanalları düşürmek için kullanıyorlar. Bu kodlarda dışarıdan gelen bağlantıları engelliyor. Sadece izin verilen ve sunucu içerisindeki bağlantılara izin veriyor. Ekte verdiğim script bu işe yarıyor. İndirip kendi serveriniz üzerinde deneyebilirsiniz. Eğer açık varsa başarılı bi şekilde kanalları kapatacaktır.
hocam paylaştığınız bash.epvp.rar nasıl kullanılıyor kendi oyunumuz üzerinde ?
 
Üst