1
mirror of git://git.acid.vegas/IRCP.git synced 2024-12-28 17:36:37 +00:00

Added random nick changes every 5 minutes

This commit is contained in:
Dionysus 2023-05-27 23:43:19 -04:00
parent 3795798be9
commit ae275bef6a
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
2 changed files with 20 additions and 7 deletions

View File

@ -95,7 +95,6 @@ All of the raw data from a server is logged & stored. The categories below are s
* Capture `IRCOPS` & `STATS p` command outputs
* Built in identd
* Checking for IPv6 availability *(SSL= in 005 responses may help verify IPv6)*
* Random nick changes for stealth on larger networks
* Support for IRC servers using old versions of SSL
## Mirrors

26
ircp.py
View File

@ -22,8 +22,9 @@ class settings:
class throttle:
channels = 3 # Maximum number of channels to scan at once
delay = 120 # Delay before registering nick (if enabled) & sending /LIST
join = 10 # Delay between channel joins
part = 3 # Delay before leaving a channel
join = 10 # Delay between channel JOINs
nick = 300 # Delay between every random NICK change
part = 3 # Delay before PARTing a channel
threads = 100 # Maximum number of threads running
timeout = 15 # Timeout for all sockets
whois = 3 # Delay between WHOIS requests
@ -137,7 +138,7 @@ class probe:
self.snapshot = copy.deepcopy(snapshot) # <--- GET FUCKED PYTHON
self.channels = {'all':list(), 'current':list(), 'users':dict()}
self.nicks = {'all':list(), 'check':list()}
self.loops = {'init':None,'chan':None,'nick':None}
self.loops = {'init':None,'chan':None,'nick':None,'whois':None}
self.reader = None
self.writer = None
@ -222,15 +223,27 @@ class probe:
else:
await asyncio.sleep(throttle.join)
del self.channels['users'][chan]
self.loops['nick'].cancel()
while self.nicks['check']:
await asyncio.sleep(1)
self.loops['nick'].cancel()
self.loops['whois'].cancel()
await self.raw('QUIT')
except asyncio.CancelledError:
pass
except Exception as ex:
error(self.display + 'error in loop_channels', ex)
async def loop_nick(self):
try:
while True:
await asyncio.sleep(throttle.nick)
await self.raw('NICK ' + self.nickname)
self.nickname = rndnick()
except asyncio.CancelledError:
pass
except Exception as ex:
error(self.display + 'error in loop_nick', ex)
async def loop_whois(self):
try:
while True:
@ -287,8 +300,9 @@ class probe:
elif numeric == '323': # RPL_LISTEND
if self.channels['all']:
debug(self.display + 'found {0} channel(s)'.format(str(len(self.channels['all']))))
self.loops['chan'] = asyncio.create_task(self.loop_channels())
self.loops['nick'] = asyncio.create_task(self.loop_whois())
self.loops['chan'] = asyncio.create_task(self.loop_channels())
self.loops['nick'] = asyncio.create_task(self.loop_nick())
self.loops['whois'] = asyncio.create_task(self.loop_whois())
elif numeric == '352' and len(args) >= 8: # RPL_WHORPL
nick = args[7]
if nick not in self.nicks['all']+['BOPM','ChanServ','HOPM']: