[sql] Proteção Contra Ddos / Flood / Nuke

GM Volcano

Freelancer Developer
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 26/06/06Posts: 115Char no Tibia: Kasugol

Tá aí um code feito pelo programador Brasileiro Proglin(membro de outro fórum)

Feito para servidores SQL..

Foi testado na svn de dezembro(12/07)

 

Bom, vamos ao codigo :

 

 

Em game.cpp, depois de :

#include "talkaction.h"
#include "spells.h"
#include "configmanager.h"

 

Adicione :

#include "tools.h"

 

Depois de :

Game::Game()
{

 

Adicione :

#ifdef __UCB_DDOS_PROTECTION__
connectionTestFalseValidUntil = std::time(NULL) + 2*60; //Ignore verification in first 2 minutes
   connectionTestTrueValidUntil = connectionTestFalseValidUntil;
connectionTestOk = true;
#endif

 

Adicione no final :

#ifdef __UCB_DDOS_PROTECTION__
bool Game::isOutSideWorldResponding(){
OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::isOutSideWorldResponding()");
uint32_t now = std::time(NULL);
if( !connectionTestOk ){
	if( now > connectionTestFalseValidUntil ){
		//Redo test
		connectionTestOk = isWorldReachable();
		connectionTestFalseValidUntil = now + 60; //False result is valid for 60 seconds
	}
} else {
	if( now > connectionTestTrueValidUntil ){
		//Redo test
		connectionTestOk = isWorldReachable();
		connectionTestTrueValidUntil = now + 10; //Ok result is valid for 10 secongs
	}
}
return connectionTestOk;
}
#endif

 

Agora em game.h, depois de :

void internalCreatureChangeVisible(Creature* creature, bool visible);
void changeLight(const Creature* creature);

#ifdef __SKULLSYSTEM__
void changeSkull(Player* player, Skulls_t newSkull);
#endif

 

Adicione :

#ifdef __UCB_DDOS_PROTECTION__
bool isOutSideWorldResponding();
#endif

 

Depois de :

uint32_t inFightTicks;
uint32_t exhaustionTicks;
uint32_t fightExhaustionTicks;

 

Adicione :

#ifdef __UCB_DDOS_PROTECTION__
bool connectionTestOk;
   uint32_t connectionTestTrueValidUntil;
   uint32_t connectionTestFalseValidUntil;
#endif

 

Agora em tools.cpp, adicione no final :

#ifdef __UCB_DDOS_PROTECTION__
bool isWorldReachable(){
int32_t ret;
#if defined __WINDOWS__	
ret = system("ping -n 1 -w 500 google.com > NUL");
#else
ret = system("ping -q -c 1 -w 1 google.com > /dev/null");	
#endif
return (ret == 0);
}
#endif

 

Agora em tools.h, adicione no final :

#ifdef __UCB_DDOS_PROTECTION__
bool isWorldReachable();
#endif

 

Agora em players.cpp, substitua :

if(skillLoss){

 

Por :

#ifdef __UCB_DDOS_PROTECTION__
if(skillLoss && g_game.isOutSideWorldResponding()){
#else
if(skillLoss){
#endif

 

Substitua :

experience -= getLostExperience();

 

Por :

#ifdef __UCB_DDOS_PROTECTION__
if( g_game.isOutSideWorldResponding() ){
 experience -= getLostExperience();
}
#else
experience -= getLostExperience();
#endif

 

Agora vá em Projeto > Opções do Projeto > Parâmetros > Compilador C++ e adicione no final :

-D__UCB_DDOS_PROTECTION__

 

Agora Recompile tudo (Ctrl + F11)!

 

Créditos constam no inicio do tópico..



Um simples scripter, porém com criatividade..

GM Volcano - Since 2006

 

In momoriam : FrozenMapper(Carlos Pain), Tprocheira, Mustorze, Voxnot, BlackDream(Gabriel Carrara), Kiko5, Morpheus_, Look_of_hell, Skulls, Clic, Heitorzin, Biakko

~Hail Old School~

Natanael Beckman

Administrador
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 06/08/06Posts: 554Char no Tibia: Balacky

Muito legal, é um topico muito importante para sevidores serios ou mesmo pra curti =D.

znExesyD.png

servercore.png

ubo

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/03/08Posts: 18

muitu bom

 

continue trazendu codes boms assin

 

nos agradecemos

 

valew!!!

UBoO
AbRaXx...
=D

Matheus gallo

Design
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/11/05Posts: 91

mto bom msm!!

 

parabens

Your's Gallo :D
since 2005

jorgesamuel

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 04/05/08Posts: 126Char no Tibia: ADM Ayame

Otimo !

 

Gostei em !

 

Mais so uma pergunta , ele realmente bloqueia nukers !?

Use e Abuse \/

Quem é meu Fan Atualize Minha Fan Bar ! /\


~Sing~


~Presentes~
Picachu

Bananexx

www.kingdom-age.net
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/10/05Posts: 14Char no Tibia: Ghost Happy
Otimo !

 

Gostei em !

 

Mais so uma pergunta , ele realmente bloqueia nukers !?

 

Bom, pelo que vi, não é bem assim!

 

Parece que ele só não deixa o player perder skills/level, caso o server seja nukado e o player morra.

 

;P

 

Acho que é isso mesmo!

 

Mais mesmo assim, muito bom! É bem útil, só que pode gerar alguns bug's né ? Ou não.. ;P

 

Att.

God Jotape

vision3.png

iii

Meu perfil.
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 14/01/07Posts: 149Char no Tibia: não jogo global.

i como eu faço isso . poderia postar tutor?

Negu96

Paradoxo
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 05/10/11Posts: 2Char no Tibia: Tianu

não entendi nda desse começo "depois de:"

k2lan

Na vida tudo passa, não importa o que tu faça
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 17/12/07Posts: 217

não entendi nda desse começo "depois de:"

 

é antigo isso amigo, não funciona mais, pois existe maneiras atualizadas de burlar isso

dhenis

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/12/09Posts: 17

É pra servidores mysql?

Consegue fazer?

 

Abraços.