1 mesaj
Administrator Administrator
  • Mesaje: 4080
  • Reacții: 76291
  • Mesaje utile: 40
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *Descriere:

    Problema:
    Acesta este un buffer fix pentru sursa serverului si libthecore, menit sa limiteze overflow-urile, flood-ul de pachete, handshake timeout-ul si abuzurile de conexiune pe IP.

    Important:
    Valorile adaugate in acest tutorial trebuie ajustate in functie de nevoile serverului vostru.


    *Link download / Code:

    1) libthecore/src/buffer.c

    Deschidem libthecore/src/buffer.c si cautam:
    Code:
    #define __LIBTHECORE__
    #include "stdafx.h"
    
    static LPBUFFER normalized_buffer_pool[32] = { NULL, };
    
    #define DEFAULT_POOL_SIZE 8192
    
    Adaugam sub:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam:
    Code:
    LPBUFFER buffer_new(int size)
    {
        if (size < 0) {
            return NULL;
        }
    
    Adaugam sub:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam:
    Code:
    void buffer_write(LPBUFFER& buffer, const void *src, int length)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam functia:
    Code:
    void buffer_read_proceed(LPBUFFER buffer, int length)
    In interior cautam:
    Code:
        if (length < buffer->length)
        {
            if (buffer->read_point + length - buffer->mem_data > buffer->mem_size)
            {
                sys_err("buffer_read_proceed: buffer overflow! length %d read_point %d", length, buffer->read_point - buffer->mem_data);
                abort();
            }
    
            buffer->read_point += length;
            buffer->length -= length;
    
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam:
    Code:
    void buffer_write_proceed(LPBUFFER buffer, int length)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam:
    Code:
    void buffer_adjust_size(LPBUFFER& buffer, int add_size)
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in libthecore/src/buffer.c cautam:
    Code:
    void buffer_realloc(LPBUFFER& buffer, int length)
    {
    
    Adaugam la inceputul functiei:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.




    2) game/src/desc.cpp

    Deschidem game/src/desc.cpp si cautam:
    Code:
    void DESC::Initialize()
    {
        m_bDestroyed = false;
    
    Adaugam sub:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in game/src/desc.cpp cautam functia:
    Code:
    bool DESC::Setup(LPFDWATCH _fdw, socket_t _fd, const struct sockaddr_in & c_rSockAddr, DWORD _handle, DWORD _handshake)
    In interior cautam:
    Code:
        m_lpFdw        = _fdw;
        m_sock        = _fd;
    
    Adaugam sub:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in functia DESC::Setup cautam:
    Code:
        m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2);
    Adaugam sub:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in game/src/desc.cpp cautam:
    Code:
    int DESC::ProcessInput()
    Inlocuim cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.




    3) game/src/desc.h

    Deschidem game/src/desc.h si cautam:
    Code:
            LPBUFFER        m_lpBufferedOutputBuffer;
            LPBUFFER        m_lpOutputBuffer;
    
    Adaugam deasupra:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.




    4) game/src/desc_manager.cpp

    Deschidem game/src/desc_manager.cpp si cautam:
    Code:
    LPDESC DESC_MANAGER::AcceptDesc(LPFDWATCH fdw, socket_t s)
    Inlocuim complet cu:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Tot in game/src/desc_manager.cpp cautam:
    Code:
    void DESC_MANAGER::DestroyDesc(LPDESC d, bool bEraseFromSet)
    {
    
    Adaugam la inceputul functiei:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.




    Explicatie:
    Acest fix adauga mai multe masuri de protectie:
    - limita maxima pentru bufferul de retea
    - validari suplimentare la alocare, scriere si realloc
    - protectie impotriva overflow-urilor in buffer
    - reset buffer in loc de abort in anumite cazuri
    - limitare flood de pachete pe conexiune
    - timeout pentru handshake
    - limitare numar de conexiuni per IP
    - limitare numar total de accept-uri pe secunda
    - limitare accept-uri per IP pe secunda

    Pe scurt:
    este un fix defensiv pentru stabilitate si pentru reducerea abuzurilor de retea.

    Atentie:
    Valorile precum:
    Code:
    MAX_NETWORK_BUFFER
    MAX_CONNECTION_PER_IP
    MAX_ACCEPT_PER_SEC
    MAX_ACCEPT_PER_IP_PER_SEC
    
    trebuie ajustate in functie de infrastructura si de numarul real de jucatori de pe server.

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/jWxeDSf7HP

    Suntem aproape 2000 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    Suntem aproape: 
    Robot Discord
    Roboțelu'
    Anunț

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    • Subiecte similare

      • de Andi » » în FIX-uri
        0
        Răspunsuri
        511
        Vizualizări
        de Andi
      • de Ene » » în FIX-uri
        0
        Răspunsuri
        753
        Vizualizări
        de Ene
      • de Ene » » în FIX-uri
        0
        Răspunsuri
        718
        Vizualizări
        de Ene
      • de Ene » » în FIX-uri
        0
        Răspunsuri
        751
        Vizualizări
        de Ene
      • de backtrace » » în FIX-uri
        1
        Răspunsuri
        1456
        Vizualizări
        de yma03781

    Înapoi la “FIX-uri”

    Informații

    Utilizatori ce navighează pe acest forum: Aioria, DarkGore și 3 vizitatori

    Discord ID copiat: