mirror of
git://git.acid.vegas/IRCP.git
synced 2024-11-23 00:16:41 +00:00
Added ChanServ INFO logging & detection for successfully registered NICK through NickServ (login details are logged)
This commit is contained in:
parent
96b8acd414
commit
4eaef543aa
@ -51,12 +51,10 @@ Mass scanning *default* ports of services is nothing new & though port 6667 is n
|
|||||||
* Checking for IPv6 availability *(SSL= in 005 responses may help verify IPv6)*
|
* Checking for IPv6 availability *(SSL= in 005 responses may help verify IPv6)*
|
||||||
* Support for IRC servers using old versions of SSL
|
* Support for IRC servers using old versions of SSL
|
||||||
* Create a seperate log for failed connections
|
* Create a seperate log for failed connections
|
||||||
* Ability to link multiple IRCP instances running in daemon mode together for balancing
|
|
||||||
* Remote syncing the logs to another server
|
* Remote syncing the logs to another server
|
||||||
* Give props to [bwall](https://github.com/bwall) for giving me the idea with his [ircsnapshot](https://github.com/bwall/ircsnapshot) repository
|
* Give props to [bwall](https://github.com/bwall) for giving me the idea with his [ircsnapshot](https://github.com/bwall/ircsnapshot) repository
|
||||||
* Confirm nick registered *(most likely through MODE +r)* *(Log nick & password)*
|
* Confirm nick registered *(most likely through MODE +r)* *(Log nick & password)*
|
||||||
* Support for hostnames in targets list *(Attempt IPv6 & fallback to IPv4)*
|
* Support for hostnames in targets list *(Attempt IPv6 & fallback to IPv4)*
|
||||||
* Detect ChanServ in channels and do `PRUVMSG NICKSERV :INFO #<CHANNEL>`
|
|
||||||
|
|
||||||
## Opt-out
|
## Opt-out
|
||||||
The IRC networks we scanned are PUBLIC networks...any person can freely connect & parse the same information. Send your hate mail to [scan@internetrelaychat.org](mailto://scan@internetrelaychat.org)
|
The IRC networks we scanned are PUBLIC networks...any person can freely connect & parse the same information. Send your hate mail to [scan@internetrelaychat.org](mailto://scan@internetrelaychat.org)
|
||||||
|
32
ircp.py
32
ircp.py
@ -116,7 +116,9 @@ class probe:
|
|||||||
self.channels = {'all':list(), 'current':list(), 'users':dict()}
|
self.channels = {'all':list(), 'current':list(), 'users':dict()}
|
||||||
self.nicks = {'all':list(), 'check':list()}
|
self.nicks = {'all':list(), 'check':list()}
|
||||||
self.loops = {'init':None, 'chan':None, 'nick':None, 'whois':None}
|
self.loops = {'init':None, 'chan':None, 'nick':None, 'whois':None}
|
||||||
|
self.login = {'pass': settings.ns_pass if settings.ns_pass else rndnick(), 'mail': settings.ns_mail if settings.ns_mail else f'{rndnick()}@{rndnick()}.'+random.choice(('com','net','org'))}
|
||||||
self.jthrottle = throttle.join
|
self.jthrottle = throttle.join
|
||||||
|
self.chanserv = True
|
||||||
self.reader = None
|
self.reader = None
|
||||||
self.write = None
|
self.write = None
|
||||||
|
|
||||||
@ -196,13 +198,9 @@ class probe:
|
|||||||
async def loop_initial(self):
|
async def loop_initial(self):
|
||||||
try:
|
try:
|
||||||
await asyncio.sleep(throttle.delay)
|
await asyncio.sleep(throttle.delay)
|
||||||
login = {
|
|
||||||
'pass': settings.ns_pass if settings.ns_pass else rndnick(),
|
|
||||||
'mail': settings.ns_mail if settings.ns_mail else f'{rndnick()}@{rndnick()}.'+random.choice(('com','net','org'))
|
|
||||||
}
|
|
||||||
cmds = ['ADMIN', 'CAP LS', 'INFO', 'IRCOPS', 'LINKS', 'MAP', 'MODULES -all', 'STATS p', 'VERSION']
|
cmds = ['ADMIN', 'CAP LS', 'INFO', 'IRCOPS', 'LINKS', 'MAP', 'MODULES -all', 'STATS p', 'VERSION']
|
||||||
random.shuffle(cmds)
|
random.shuffle(cmds)
|
||||||
cmds += ['PRIVMSG NickServ :REGISTER {0} {1}'.format(login['pass'], login['mail']), 'LIST']
|
cmds += ['PRIVMSG NickServ :REGISTER {0} {1}'.format(self.login['pass'], self.login['mail']), 'LIST']
|
||||||
for command in cmds:
|
for command in cmds:
|
||||||
try:
|
try:
|
||||||
await self.raw(command)
|
await self.raw(command)
|
||||||
@ -210,7 +208,6 @@ class probe:
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
await asyncio.sleep(1.5)
|
await asyncio.sleep(1.5)
|
||||||
del login
|
|
||||||
if not self.channels['all']:
|
if not self.channels['all']:
|
||||||
error(self.display + '\033[31merror\033[0m - no channels found')
|
error(self.display + '\033[31merror\033[0m - no channels found')
|
||||||
await self.raw('QUIT')
|
await self.raw('QUIT')
|
||||||
@ -228,6 +225,9 @@ class probe:
|
|||||||
chan = random.choice(self.channels['all'])
|
chan = random.choice(self.channels['all'])
|
||||||
self.channels['all'].remove(chan)
|
self.channels['all'].remove(chan)
|
||||||
try:
|
try:
|
||||||
|
if self.chanserv:
|
||||||
|
await self.sendmsg('ChanServ', 'INFO ' + chan)
|
||||||
|
await asyncio.sleep(1)
|
||||||
await self.raw('JOIN ' + chan)
|
await self.raw('JOIN ' + chan)
|
||||||
except:
|
except:
|
||||||
break
|
break
|
||||||
@ -306,6 +306,12 @@ class probe:
|
|||||||
raise Exception(bad.error[check[0]])
|
raise Exception(bad.error[check[0]])
|
||||||
elif args[0] == 'PING':
|
elif args[0] == 'PING':
|
||||||
await self.raw('PONG ' + args[1][1:])
|
await self.raw('PONG ' + args[1][1:])
|
||||||
|
elif event == 'MODE' and len(args) == 4:
|
||||||
|
nick = args[2]
|
||||||
|
if nick == self.nickanme:
|
||||||
|
mode = args[3][1:]
|
||||||
|
if mode == '+r':
|
||||||
|
self.snapshot['registered'] = self.login
|
||||||
elif event == '001': #RPL_WELCOME
|
elif event == '001': #RPL_WELCOME
|
||||||
host = args[0][1:]
|
host = args[0][1:]
|
||||||
self.snapshot['server'] = self.server
|
self.snapshot['server'] = self.server
|
||||||
@ -356,6 +362,10 @@ class probe:
|
|||||||
await asyncio.sleep(throttle.part)
|
await asyncio.sleep(throttle.part)
|
||||||
await self.raw('PART ' + chan)
|
await self.raw('PART ' + chan)
|
||||||
self.channels['current'].remove(chan)
|
self.channels['current'].remove(chan)
|
||||||
|
elif event == '401' and len(args) >= 4: # ERR_NOSUCHNICK
|
||||||
|
nick = args[3]
|
||||||
|
if nick == 'ChanServ':
|
||||||
|
self.chanserv = False
|
||||||
elif event == '421' and len(args) >= 3: # ERR_UNKNOWNCOMMAND
|
elif event == '421' and len(args) >= 3: # ERR_UNKNOWNCOMMAND
|
||||||
msg = ' '.join(args[2:])
|
msg = ' '.join(args[2:])
|
||||||
if 'You must be connected for' in msg:
|
if 'You must be connected for' in msg:
|
||||||
@ -385,11 +395,7 @@ class probe:
|
|||||||
raise Exception('Network has a password')
|
raise Exception('Network has a password')
|
||||||
elif event == '487': # ERR_MSGSERVICES
|
elif event == '487': # ERR_MSGSERVICES
|
||||||
if '"/msg NickServ" is no longer supported' in line:
|
if '"/msg NickServ" is no longer supported' in line:
|
||||||
login = {
|
await self.raw('/NickServ REGISTER {0} {1}'.format(self.login['pass'], self.login['mail']))
|
||||||
'pass': settings.ns_pass if settings.ns_pass else rndnick(),
|
|
||||||
'mail': settings.ns_mail if settings.ns_mail else f'{rndnick()}@{rndnick()}.'+random.choice(('com','net','org'))
|
|
||||||
}
|
|
||||||
await self.raw('/NickServ REGISTER {0} {1}'.format(login['pass'], login['mail']))
|
|
||||||
elif event == 'KILL':
|
elif event == 'KILL':
|
||||||
nick = args[2]
|
nick = args[2]
|
||||||
if nick == self.nickname:
|
if nick == self.nickname:
|
||||||
@ -420,11 +426,11 @@ class probe:
|
|||||||
elif ('You are connected' in data or 'Connected securely via' in data) and ('SSL' in data or 'TLS' in data):
|
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('"','')
|
cipher = data.split()[-1:][0].replace('\'','').replace('"','')
|
||||||
self.snapshot['ssl_cipher'] = cipher
|
self.snapshot['ssl_cipher'] = cipher
|
||||||
elif nick == 'NickServ':
|
elif nick in ('ChanServ','NickServ'):
|
||||||
self.snapshot['services'] = True
|
self.snapshot['services'] = True
|
||||||
if 'is now registered' in msg or f'Nickname {self.nickname} registered' in msg:
|
if 'is now registered' in msg or f'Nickname {self.nickname} registered' in msg:
|
||||||
debug(self.display + '\033[35mNickServ\033[0m registered')
|
debug(self.display + '\033[35mNickServ\033[0m registered')
|
||||||
self.snapshot['registered'] = True
|
self.snapshot['registered'] = self.login
|
||||||
elif '!' not in args[0]:
|
elif '!' not in args[0]:
|
||||||
if 'dronebl.org/lookup' in msg:
|
if 'dronebl.org/lookup' in msg:
|
||||||
self.snapshot['proxy'] = True
|
self.snapshot['proxy'] = True
|
||||||
|
Loading…
Reference in New Issue
Block a user