• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Crashe poprzez magebombe

legolas23

New Member
Joined
Jan 8, 2009
Messages
537
Reaction score
3
Witam.
Wiecie moze jak wyeliminowac magebomb crashe albo chociaz sie przed nimi zabezpieczyc?
Drugie pytanie to czy moge w jakikolwiek sposob zablokowac ip magebombera na zawsze poprzez wpisanie komendy w linuxie?

Da się zablokować jakoś w linuxie wszystkie połączenia z danego adresu ip?
 
Last edited by a moderator:
Z tego co widze to sporo osób ma problemy związane z magebomb. Ja zabezpieczam się przed tym ograniczając połączenie z portem otsa do 3 połączeń z danego IP.

Na linuxie bardzo prosto:
Code:
iptables -A INPUT -p tcp --dport 7171 -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset

(zakładając, że port 7171 to port gry)

Ostatnio prosił mnie kolega o sposób na winshita:

Można co prawda w lua, ale ja zrobiłem po swojemu. Dodałem do źródeł małą metodę która działa podobnie co mój sposób opisany dla linuxa.

connection.h

po linijce:
Code:
bool isDisabled(uint32_t clientIp, int32_t protocolId);
dodajemy:
Code:
bool isBlocked(uint32_t clientIp);

connection.cpp

gdzieś na końcu dodajemy:
Code:
bool ConnectionManager::isBlocked(uint32_t clientIp)
{
     OTSYS_THREAD_LOCK_CLASS lockClass(m_connectionManagerLock);
     
     if(!clientIp)
         return false;
         
     std::list<Connection*>::iterator it = m_connections.begin();
     
     int32_t conn = 0;
     while(it != m_connections.end())
	{
		if((*it)->getIP() == clientIp) conn++;
        
		++it;
	}
    
    if(conn > 3) return true;
	 
    return false;
}

gdzie linijka:
if(conn > 3) return true;
określa limit połączeń z grą na dane IP. (w tym przypadku limit na 3 połączenia)

protocolgame.cpp

po:
Code:
if(ConnectionManager::getInstance()->isDisabled(getIP(), protocolId))
	{
		disconnectClient(0x14, "Too many connections attempts from this IP. Try again later.");
		return false;
	}

dodajemy:

Code:
	if(ConnectionManager::getInstance()->isBlocked(getIP()))
	{
		disconnectClient(0x14, "To many connections with this IP. Your connection is blocked xD.");
		return false;
	}

Mam nadzieje, że o niczym nie zapomniałem, gdyby komuś nie działało PM me. Zaletą tego jest to, że powinno to działać na większośći dystrybucji ots.

P.S: Zapomniałem dodać, że ten drugi sposób testowany na TFS 0.3.4pl2, na innych nie gwarantuje ale możliwe, że będzie śmigać.
 
Last edited:
Jest masz skrypti na data/globalevents/login.lua

i na skrypt ty pomosz mnie kto jest na skrypt
 
Pare revision po wydaniu 0.3.4PL2 problem z magebombami zostal naprawiony, ze spamowaniem spelli w duzej czesci tez.

Jednakze, naprzyklad wymienianie golda, krecenie sie (ctrl + strzalki) wieloma postaciami naraz powoduje porzadne obciazenie serwera, to limit polaczen dla jednego IP moze cos pomoc na te sprawy ;P
 
Dodałem ta linijkę do linuxa ,loguje dzisiaj rano i jak się ucieszyłem bo 110 osób online. A tu patrze znów magebomba ;/ Co zrobiłem nie tak?
 
@2xup

Na linuxie bardzo prosto:
Code:
iptables -A INPUT -p tcp --dport [B]7171[/B] -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset

(zakładając, że port 7171 to port gry)

daje dyche, ze twoj game port to 7172
 
Albo możesz zrobić coś takiego:
Config.lua
PHP:
forceSlowConnetionsToDisconnect="yes"
Od kiedy dałem to u siebie, nie było crashy powodowanych przez magebomb;)
 
Back
Top