INTRODUÇÃO
Bom pessoal, atualmente o DDOS 3.0 vem aterrorizando muitos mices, então eu, Identify vim mostrar a solução.
TUTORIAL
Primeiro substitua a def connectionMade por esta:
def connectionMade(self):
self.address = self.transport.getPeer()
self.address = [self.address.host]
self.server = self.factory
if self.server.getIPPermaBan(self.address[0]):
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
elif self.address[0] in self.server.tempIPBanList:
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
else:
try:
derp = self.server.connectCounts[self.address[0]]
self.server.connectCounts[self.address[0]]['count'] += 1
except:
self.server.connectCounts[self.address[0]] = {'count':1}
# Verificação de ataque # DDos # Dos
# Check DOS
if self.server.connectCounts[self.address[0]]['count'] >= 20:
self.server.tempIPBanList.append(self.address[0])
self.transport.loseConnection()
self.server.sendModChat(self, "\x06\x14", ["<N>DOS Ataque Bloqueado em IP: [<CH>"+str(self.address[0])+"<N>]"])
print "DOS Attack Blocked in IP: ["+str(self.address[0])+"]"
self.server.connectCounts[self.address[0]] = {'count':1}
with open("./others/KiwiGuard/Data/Block_IPList.kwg", "r+") as f:
old = f.read()
f.seek(0)
f.write("" + str(now.strftime("%m/%d/%Y %I:%M:%S %p")) + "|"+ str(self.address[0]) +"|0\n" + old)
logging.warning("KiwiGuard Firewall Detected: (DOS form IP "+self.address[0]+"), Act: Disconnect He and Ban Perma IP.")
else:
self.validatingLoader = self.server.ValidateLoader
#self.shoplist = self.server.shopList
self.NoDataTimer = reactor.callLater(7, self.transport.loseConnection)
if VERBOSE:
print "["+str(datetime.today())+"] "+'Interface de login enviada para '+str(self.address[0])
self.SGMDT = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
LCDMT = str(self.server.LCDMT)
self.CMDTEC = random.randrange(1000, 9999)
self.ICMDTEC = self.CMDTEC
i = 0
while(i < 10):
self.CMDT = LCDMT[i]
if self.CMDT == "0":
self.SGMDT[i] = "10"
else:
self.SGMDT[i] = self.CMDT
i = (i+1)
Segundo passo é substituir a def connectionLost
def connectionLost(self, status):
if self.room:
self.room.removeClient(self)
self.server = self.factory
try:
derp = self.server.connectCounts[self.address[0]]
self.server.connectCounts[self.address[0]]['count'] -= 1
except:
self.server.connectCounts[self.address[0]] = {'count':0}
if self.username != "":
if self.isInTribe:
self.sendTribeDisconnected(self.username)
if self.privilegeLevel in [10,6,5]:
self.server.sendModChat(self, "\x1A\x05", ["-", self.username+" saiu."])
if self.AwakeTimerKickTimer:
try:
self.AwakeTimerKickTimer.cancel()
except:
self.AwakeTimerKickTimer=None
if VERBOSE:
print "["+str(datetime.today())+"] "+'Conexão interrompida: '+str(self.address[0])
self.transport.loseConnection()
#procure por: def found_terminator e substitua:
def found_terminator(self, MDT, data, Size):
if self.validatingVersion:
if self.server.getIPPermaBan(self.address[0]):
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
elif self.address[0] in self.server.tempIPBanList:
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
else:
self.isIPban = False
if VERBOSE:
print "RECV: "+repr(data)
if LOGVERB:
#logging.warning("RECV: "+repr(data))
pass
if data.startswith("\x1c\x01"):
version, connectionkeylen = struct.unpack('!hh', data[2:6])
version = "1." + str(version)
connectionkey = data[6:6+connectionkeylen]
print connectionkey
if self.isinit:
if self.server.GetCapabilities:
secFile = open("./Compile/Capabilities.swf", "rb")
self.validatingLoader = True
elif self.validatingLoader:
secFile = open("./Compile/AltKikoo.swf", "rb")
else:
secFile = open("./Compile/Kikoo.swf", "rb")
secData = secFile.read()
secFile.close()
secB64=base64.b64encode(secData)
self.isinit = False
if self.server.ValidateVersion:
if version == VERSION:
self.sendCorrectVersion()
self.AwakeTimerKickTimer = reactor.callLater(600, self.AwakeTimerKick)
else:
self.transport.loseConnection()
else:
self.sendCorrectVersion()
self.AwakeTimerKickTimer = reactor.callLater(600, self.AwakeTimerKick)
self.validatingVersion = False
else:
#logging.error(repr(data))
self.transport.loseConnection()
else:
self.parseData(data, MDT, Size)
#Substituir def inforequestReceived(self, data):
def inforequestReceived(self, data):
if self.NoDataTimer:
try:
self.NoDataTimer.cancel()
except:
self.NoDataTimer=None
if VERBOSE:
print "RECV: "+repr(data)
if LOGVERB:
pass
##logging.warning("RECV: "+repr(data))
if self.isBanned:
data=""
self.transport.loseConnection()
self.buffer += data
if self.buffer=="<policy-file-request/>\x00":
if self.server.getIPPermaBan(self.address[0]):
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
elif self.address[0] in self.server.tempIPBanList:
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
self.isIPban = False
self.transport.write(r"""<cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>""" + "\x00")
self.transport.loseConnection()
elif self.buffer=="SuperBelette\x00":
if self.server.getIPPermaBan(self.address[0]):
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
elif self.address[0] in self.server.tempIPBanList:
self.transport.loseConnection()
self.isIPban = True
self.isBanned = True
data=""
else:
self.isIPban = False
self.isinit = False
self.sentinelle = True
self.sentinelleSendStat()
self.sentinelleSendCPU()
elif self.buffer.startswith("PlayerStat-"):
username=self.buffer[11:].replace("\x00","").lower().capitalize()
if len(username)<3 or len(username)>12:
self.transport.loseConnection()
elif self.server.checkExistingUsers(username):
name = username
tribe = self.server.getTribeName(username)
rounds = self.server.getRoundsCount(username)
cheese = self.server.getCheeseCount(username)
first = self.server.getFirstCount(username)
chamansave = self.server.getSavesCount(username)
chamancheese = self.server.getShamanCheeseCount(username)
chamangold = self.server.getShamanGoldSavesCount(username)
micetitle = self.server.getCurrentTitle(username)
self.sendDataOld("\x05", [name, tribe, rounds, cheese, first, chamansave, chamancheese, chamangold, micetitle])
self.transport.loseConnection()
else:
self.transport.loseConnection()
Lembre-se definir: class TransformiceClientHandler(TFMProtocol):
self.validatingVersion = True
self.CMDTEC = 0
self.SGMDT = [0, 0, 0]
self.ICMDTEC = 0
Agora lembra-se de definir as selfs no class TransformiceServer(protocol.ServerFactory):
Procure por: self.PlayerCountHistory=[
E adicione isso acima alinhado:
self.tempAccountBanList=[]
self.tempIPBanList=[]
self.IPPermaBanCache=[]
self.connectCounts = {}
self.langues = {}
Se você não tiver isso: self.ValidateLoader = self.str2bool(self.getServerSetting("ValidateLoader"))
adicione um pouco mais acima dos códigos.
CRÉDITOS
»๖̶ۣۜSтуlє ๖̶ۣۜAρяєηdιz™« - CriarMice Sempre a Melhor!!