1
mirror of git://git.acid.vegas/IRCP.git synced 2024-12-27 08:56:37 +00:00

Improved ban detections & added SSL/TLS cipher logging

This commit is contained in:
Dionysus 2023-06-05 21:36:25 -04:00
parent 7ace89b659
commit 3f66438ebe
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE

52
ircp.py
View File

@ -53,6 +53,26 @@ badchan = {
'520' : 'ERR_OPERONLY', '926' : 'ERR_BADCHANNEL'
}
badserver = {
'install identd' : 'Identd required',
'trying to reconnect too fast' : 'Throttled',
'your host is trying to (re)connect too fast' : 'Throttled',
'reconnecting too fast' : 'Throttled',
'access denied' : 'Access denied',
'not authorized to' : 'Not authorized',
'not authorised to' : 'Not authorized',
'password mismatch' : 'Password mismatch',
'dronebl' : 'DroneBL',
'dnsbl' : 'DNSBL',
'g:lined' : 'G:Lined',
'z:lined' : 'Z:Lined',
'timeout' : 'Timeout',
'closing link' : 'Banned',
'banned' : 'Banned',
'client exited' : 'QUIT',
'quit' : 'QUIT'
}
def backup(name):
try:
with tarfile.open(f'backup/{name}.tar.gz', 'w:gz') as tar:
@ -253,17 +273,11 @@ class probe:
del self.channels['users'][chan]
error(f'{self.display}\033[31merror\033[0m - {chan}', badchan[event])
elif line.startswith('ERROR :'):
if line.startswith('ERROR :Closing Link'):
if 'dronebl' in line.lower():
check = [check for check in badserver if check in line.lower()]
if check:
if check[0] in ('dronebl','dnsbl'):
self.snapshot['proxy'] = True
error(self.display + '\033[93mDroneBL detected\033[0m')
raise Exception('DroneBL')
else:
raise Exception('Banned')
elif line.startswith('ERROR :Trying to reconnect too fast') or line.startswith('ERROR :Your host is trying to (re)connect too fast') or line.startswith('ERROR :Reconnecting too fast'):
raise Exception('Throttled')
elif line.startswith('ERROR :Access denied'):
raise Exception('Access denied')
raise Exception(badserver[check[0]])
elif args[0] == 'PING':
await self.raw('PONG ' + args[1][1:])
elif event == '001': #RPL_WELCOME
@ -286,7 +300,7 @@ class probe:
nick = args[3]
if 'open proxy' in line.lower() or 'proxy monitor' in line.lower():
self.snapshot['proxy'] = True
error(self.display + '\033[93mProxy Monitor detected\033[0m')
error(self.display + '\033[93mProxy Monitor detected\033[0m', nick)
else:
debug(f'{self.display}\033[34mWHOIS\033[0m {nick}')
elif event == '322' and len(args) >= 4: # RPL_LIST
@ -336,12 +350,11 @@ class probe:
self.jthrottle = throttle.seconds if seconds > throttle.seconds else seconds
error(self.display + '\033[31merror\033[0m - delay found', msg)
elif event == '465': # ERR_YOUREBANNEDCREEP
if 'dronebl' in line.lower():
self.snapshot['proxy'] = True
error(self.display + '\033[93mDroneBL detected\033[0m')
raise Exception('DroneBL')
else:
raise Exception('K-Lined')
check = [check for check in badserver if check in line.lower()]
if check:
if check[0] in ('dronebl','dnsbl'):
self.snapshot['proxy'] = True
raise Exception(badserver[check[0]])
elif event == '464': # ERR_PASSWDMISMATCH
raise Exception('Network has a password')
elif event == '487': # ERR_MSGSERVICES
@ -378,6 +391,9 @@ class probe:
if msg[:8] == '\001VERSION':
version = random.choice(('http://www.mibbit.com ajax IRC Client','mIRC v6.35 Khaled Mardam-Bey','xchat 0.24.1 Linux 2.6.27-8-eeepc i686','rZNC Version 1.0 [02/01/11] - Built from ZNC','thelounge v3.0.0 -- https://thelounge.chat/'))
await self.raw(f'NOTICE {nick} \001VERSION {version}\001')
elif ('You are connected' in data or 'Connected securely via' in data) and ('SSL' in data or 'TLS' in data):
cipher = data.split()[-1:][0].replace('\'','').replace('"','')
self.snapshot['ssl_cipher'] = cipher
elif nick == 'NickServ':
self.snapshot['services'] = True
if 'is now registered' in msg or f'Nickname {self.nickname} registered' in msg:
@ -389,7 +405,7 @@ class probe:
error(self.display + '\033[93mDroneBL detected\033[0m')
raise Exception('DroneBL')
else:
if [i for i in ('You\'re banned','You are permanently banned','You are banned','You are not welcome') if i in msg]:
if [i for i in ('You\'re banned','You are permanently banned','You are banned','You are not welcome','Temporary K-line') if i in msg]:
raise Exception('K-Lined')
except (UnicodeDecodeError, UnicodeEncodeError):
pass