Strona Główna Belxena 8.4 RPG

Forum poświęcone powstawaniu Belxena OTS

  • Nie jesteś zalogowany.
  • Polecamy: Komputery

#1 2009-05-14 18:02:17

Macgates

Administrator

419634
Skąd: Rio de Fabrico
Zarejestrowany: 2009-05-01
Posty: 50
Punktów :   

[C++]Blokowanie ip tak jak na rl tibi

Domyślnie [C++]Blokowanie ip tak jak na rl tibi
Skrypt by Tom

Skrypt działa na takiej zasadzie że blokuje ip oraz konto jeśli ktoś ciągle wpisuje złe passy, bo jeśli tak masowo dużo osób wpisuje złe passy to powoduje to crash serva a ten skrypt jest po to aby temu zapobiec.

W otserv.cpp

Po:

Kod:

Actions actions(&g_game);
Commands commands(&g_game);
Monsters g_monsters;

Dodaj to:

Kod:

Kod:

#ifdef UCB_SUSPEND_SYSTEM
struct AccSuspensaUCB {
unsigned int conta;
unsigned int tentativas;
std::time_t tempo;
bool bloqueado;
};
struct IpSuspensoUCB {
unsigned long ip;
unsigned int tentativas;
std::time_t tempo;
bool bloqueado;
};
std::vector< struct AccSuspensaUCB > ListaAccSuspensas;
std::vector< struct IpSuspensoUCB > ListaIpsSuspensos;
std::time_t tempo_reciclagem = std::time(NULL) + 3600;
#endif // UCB_SUSPEND_SYSTEM

Po:

Kod:

Kod:

bool isclientBanished(SOCKET s)
{
sockaddr_in sain;
socklen_t salen = sizeof(sockaddr_in);
if (getpeername(s, (sockaddr*)&sain, &salen) == 0)
{
unsigned long clientip = *(unsigned long*)&sain.sin_addr;
for (size_t i = 0; i < bannedIPs.size(); ++i) {
if ((bannedIPs[i].first & bannedIPs[i].second) == (clientip & bannedIPs[i].second))
return true;
}
}
return false;
}

Dodaj to:

Kod:

Kod:

#ifdef UCB_SUSPEND_SYSTEM
// Ulisses (Proglin) - IP/ACC Suspend System
// April / 2006 for turion.no-ip.info
bool isAccIPSuspend(int acc, SOCKET s)
{
bool suspensa = false;
bool achouip = false;
bool achouacc = false;
sockaddr_in sain;
socklen_t salen = sizeof(sockaddr_in);
std::time_t now = std::time(NULL);
/* Recycling Lists (to save memory wink ) */
if( now > tempo_reciclagem ){
OTSYS_THREAD_LOCK(g_game.gameLock, "UCB_IP_Seach");
OTSYS_THREAD_LOCK(g_game.gameLock, "UCB_ACC_Seach");
tempo_reciclagem = now + 3600;
bool achou = true;
std::cout << "Ips suspend before recycling: " << ListaIpsSuspensos.size() << std::endl;
std::cout << "Accs suspend before recycling: " << ListaAccSuspensas.size() << std::endl;
/* Ips list */
std::vector< struct IpSuspensoUCB >::iterator i = ListaIpsSuspensos.begin();
while( achou ){
achou = false;
while(i != ListaIpsSuspensos.end()){
if((*i).tempo < now){
ListaIpsSuspensos.erase(i);
achou = true;
break;
}
i++;
}
}
/* Acc list */
achou = true;
std::vector< struct AccSuspensaUCB >::iterator ii = ListaAccSuspensas.begin();
while( achou ){
achou = false;
while(ii != ListaAccSuspensas.end()){
if((*ii).tempo < now){
ListaAccSuspensas.erase(ii);
achou = true;
break;
}
ii++;
}
}
OTSYS_THREAD_UNLOCK(g_game.gameLock, "UCB_ACC_Seach");
OTSYS_THREAD_UNLOCK(g_game.gameLock, "UCB_IP_Seach");
std::cout << "Ips suspend after recycling: " << ListaIpsSuspensos.size() << std::endl;
std::cout << "Accs suspend after recycling: " << ListaAccSuspensas.size() << std::endl;
}
/* Search for IP */
OTSYS_THREAD_LOCK(g_game.gameLock, "UCB_IP_Seach");
if (getpeername(s, (sockaddr*)&sain, &salen) == 0 ){
unsigned long clientip = *(unsigned long*)&sain.sin_addr;
for (size_t i = 0; i < ListaIpsSuspensos.size(); ++i) {
if( ListaIpsSuspensos[i].ip == clientip ){
achouip = true;
if( ListaIpsSuspensos[i].tempo < now ){
ListaIpsSuspensos[i].tentativas = 0;
ListaIpsSuspensos[i].bloqueado = false;
ListaIpsSuspensos[i].tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
}
if( !ListaIpsSuspensos[i].bloqueado ){
if( ListaIpsSuspensos[i].tentativas > g_config.getGlobalNumber("suspend_ip_tries", 4) - 1 ){
ListaIpsSuspensos[i].bloqueado = true;
ListaIpsSuspensos[i].tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
}
}
ListaIpsSuspensos[i].tentativas++;
suspensa = ListaIpsSuspensos[i].bloqueado;
}
}
if( !achouip ){
struct IpSuspensoUCB candidatoip;
candidatoip.ip = clientip;
candidatoip.tentativas = 1;
candidatoip.tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
candidatoip.bloqueado = false;
ListaIpsSuspensos.push_back(candidatoip);
}
}
OTSYS_THREAD_UNLOCK(g_game.gameLock, "UCB_IP_Seach");
/* Search for Account */
OTSYS_THREAD_LOCK(g_game.gameLock, "UCB_ACC_Seach");
for (size_t i = 0; i < ListaAccSuspensas.size(); ++i) {
if( ListaAccSuspensas[i].conta == acc ){
achouacc = true;
if( ListaAccSuspensas[i].tempo < now ){
ListaAccSuspensas[i].tentativas = 0;
ListaAccSuspensas[i].bloqueado = false;
ListaAccSuspensas[i].tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
}
if( !ListaAccSuspensas[i].bloqueado ){
if( ListaAccSuspensas[i].tentativas > g_config.getGlobalNumber("suspend_acc_tries", 2) - 1 ){
ListaAccSuspensas[i].bloqueado = true;
ListaAccSuspensas[i].tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
}
}
ListaAccSuspensas[i].tentativas++;
if( !suspensa )
suspensa = ListaAccSuspensas[i].bloqueado;
}
}
if( !achouacc ){
struct AccSuspensaUCB candidatoacc;
candidatoacc.conta = acc;
candidatoacc.tentativas = 1;
candidatoacc.tempo = now + 60*g_config.getGlobalNumber("suspend_time_max", 15);
candidatoacc.bloqueado = false;
ListaAccSuspensas.push_back(candidatoacc);
}
OTSYS_THREAD_UNLOCK(g_game.gameLock, "UCB_ACC_Seach");
return suspensa;
}
#endif // UCB_SUSPEND_SYSTEM

Zmieniając ten Kod

Kod:

if(isclientBanished(s)) {
msg.AddByte(0x0A);
msg.AddString("Your IP is banished!");
}
Na ten kod:
Kod:

Kod:

#ifdef UCB_SUSPEND_SYSTEM
bool recebeuban = false;
if(isclientBanished(s)) {
recebeuban = true;
msg.AddByte(0x0A);
msg.AddString("Your IP is banished!");
}
if( isAccIPSuspend(accnumber, s) || recebeuban ){
if( !recebeuban ){
msg.AddByte(0x0A);
msg.AddString(g_config.getGlobalString("suspendmsg","Your IP/ACC has been suspended for some minuts\n\nTry again later."));
}
}
#else
if(isclientBanished(s)) {
msg.AddByte(0x0A);
msg.AddString("Your IP is banished!");
}
#endif // UCB_SUSPEND_SYSTEM

W config.lua dodaj:



Kod:

---- UCB Suspend System (April/2006)
-- Suspend time period (in minuts)
suspend_time_max = 10
-- Acc tries to be suspended in the period
suspend_acc_tries = 2
-- Same IP loggin tries to be suspended in the period
suspend_ip_tries = 4
-- Message to user when he got suspended
suspendmsg = "Your IP/ACC has been suspended for 10 minuts."

Dodać do parametrĂłw:

Kod:

-DUCB_SUSPEND_SYSTEM

Pozdrawiam, GM Macgates


http://img257.imageshack.us/img257/8138/neverendstm0qr1md8ep0.gif

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.2f2lo.pun.pl www.wshbw.pun.pl www.k2008sgsp.pun.pl www.chormaprobe.pun.pl www.grabeyblade.pun.pl