mirror of
git://git.acid.vegas/IRCP.git
synced 2024-11-22 16:06:41 +00:00
Added daemon mode (24/7 scanning) with tar backups
This commit is contained in:
parent
79c91ba6d1
commit
83dc061112
@ -152,9 +152,6 @@ With that being said, the ability for anyone to be able to do what this project
|
|||||||
* 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 *(Sync to file every hour maybe)*
|
* Create a seperate log for failed connections *(Sync to file every hour maybe)*
|
||||||
* Colored output option
|
|
||||||
* Added daemon mode *(24/7 scanning heavily throttled in this mode)*
|
|
||||||
* Add overlapping logs option *(Do not skip networks we already have logs for,just update them with new changes)*
|
|
||||||
* Add snapshot boolean for rbl/proxy detection/scanning
|
* Add snapshot boolean for rbl/proxy detection/scanning
|
||||||
* Ability to link multiple IRCP instances running in daemon mode together for balancing
|
* Ability to link multiple IRCP instances running in daemon mode together for balancing
|
||||||
|
|
||||||
|
60
ircp.py
60
ircp.py
@ -11,10 +11,9 @@ import sys
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
class settings:
|
class settings:
|
||||||
#daemon = False # Run IRCP in daemon mode (24/7 throttled scanning)
|
daemon = False # Run in daemon mode (24/7 throttled scanning)
|
||||||
errors = True # Show errors in console
|
errors = True # Show errors in console
|
||||||
errors_conn = False # Show connection errors in console
|
errors_conn = False # Show connection errors in console
|
||||||
#log_overlap = False # Do not skip networks we have logs for, just update them
|
|
||||||
log_max = 5000000 # Maximum log size (in bytes) before starting another
|
log_max = 5000000 # Maximum log size (in bytes) before starting another
|
||||||
nickname = 'IRCP' # None = random
|
nickname = 'IRCP' # None = random
|
||||||
username = 'ircp' # None = random
|
username = 'ircp' # None = random
|
||||||
@ -24,28 +23,21 @@ class settings:
|
|||||||
vhost = None # Bind to a specific IP address
|
vhost = None # Bind to a specific IP address
|
||||||
|
|
||||||
class throttle:
|
class throttle:
|
||||||
channels = 3 # Maximum number of channels to scan at once
|
channels = 3 if not settings.daemon else 2 # Maximum number of channels to scan at once
|
||||||
delay = 300 # Delay before registering nick (if enabled) & sending /LIST
|
delay = 300 if not settings.daemon else 600 # Delay before registering nick (if enabled) & sending /LIST
|
||||||
join = 10 # Delay between channel JOINs
|
join = 10 if not settings.daemon else 30 # Delay between channel JOINs
|
||||||
nick = 300 # Delay between every random NICK change
|
nick = 300 if not settings.daemon else 600 # Delay between every random NICK change
|
||||||
part = 10 # Delay before PARTing a channel
|
part = 10 if not settings.daemon else 30 # Delay before PARTing a channel
|
||||||
seconds = 300 # Maximum seconds to wait when throttled for JOIN
|
seconds = 300 if not settings.daemon else 600 # Maximum seconds to wait when throttled for JOIN
|
||||||
threads = 100 # Maximum number of threads running
|
threads = 100 if not settings.daemon else 25 # Maximum number of threads running
|
||||||
timeout = 30 # Timeout for all sockets
|
timeout = 30 if not settings.daemon else 60 # Timeout for all sockets
|
||||||
whois = 5 # Delay between WHOIS requests
|
whois = 5 if not settings.daemon else 15 # Delay between WHOIS requests
|
||||||
ztimeout = 200 # Timeout for zero data from server
|
ztimeout = 200 if not settings.daemon else 300 # Timeout for zero data from server
|
||||||
|
|
||||||
donotscan = (
|
donotscan = (
|
||||||
'irc.dronebl.org',
|
'irc.dronebl.org', 'irc.alphachat.net',
|
||||||
'irc.alphachat.net',
|
'5.9.164.48', '45.32.74.177', '104.238.146.46', '149.248.55.130',
|
||||||
'5.9.164.48',
|
'2001:19f0:6001:1dc::1', '2001:19f0:b001:ce3::1', '2a01:4f8:160:2501:48:164:9:5', '2001:19f0:6401:17c::1'
|
||||||
'45.32.74.177',
|
|
||||||
'149.248.55.130',
|
|
||||||
'104.238.146.46'
|
|
||||||
#'2001:19f0:6001:1dc::1',
|
|
||||||
#'2001:19f0:b001:ce3::1',
|
|
||||||
#'2a01:4f8:160:2501:48:164:9:5',
|
|
||||||
#'2001:19f0:6401:17c::1'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
snapshot = {
|
snapshot = {
|
||||||
@ -64,7 +56,7 @@ snapshot = {
|
|||||||
'002' : None, # RPL_YOURHOST
|
'002' : None, # RPL_YOURHOST
|
||||||
'003' : None, # RPL_CREATED
|
'003' : None, # RPL_CREATED
|
||||||
'004' : None, # RPL_MYINFO
|
'004' : None, # RPL_MYINFO
|
||||||
'005' : None, # RPL_ISUPPORT #TODO: Lots of useful information here can be parsed for fine tuning throttles
|
'005' : None, # RPL_ISUPPORT #TODO: lots of useful information here can be parsed for fine tuning throttles
|
||||||
'006' : None, # RPL_MAP
|
'006' : None, # RPL_MAP
|
||||||
'018' : None, # RPL_MAPUSERS
|
'018' : None, # RPL_MAPUSERS
|
||||||
'257' : None, # RPL_ADMINLOC1
|
'257' : None, # RPL_ADMINLOC1
|
||||||
@ -123,6 +115,17 @@ snapshot = {
|
|||||||
'421' : None # ERR_UNKNOWNCOMMAND
|
'421' : None # ERR_UNKNOWNCOMMAND
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def backup(name):
|
||||||
|
try:
|
||||||
|
with tarfile.open(f'backup/{name}.tar.gz', 'w:gz') as tar:
|
||||||
|
for log in os.listdir('logs'):
|
||||||
|
tar.add('logs/' + log)
|
||||||
|
debug('\033[1;32mBACKUP COMPLETE\033[0m')
|
||||||
|
for log in os.listdir('logs'):
|
||||||
|
os.remove('logs/' + log)
|
||||||
|
except Exception as ex:
|
||||||
|
error('\033[1;31mBACKUP FAILED\033[0m', ex)
|
||||||
|
|
||||||
def debug(data):
|
def debug(data):
|
||||||
print('{0} \033[30m|\033[0m [\033[35m~\033[0m] {1}'.format(time.strftime('%I:%M:%S'), data))
|
print('{0} \033[30m|\033[0m [\033[35m~\033[0m] {1}'.format(time.strftime('%I:%M:%S'), data))
|
||||||
|
|
||||||
@ -450,11 +453,22 @@ else:
|
|||||||
targets = [line.rstrip() for line in open(targets_file).readlines() if line and line not in donotscan]
|
targets = [line.rstrip() for line in open(targets_file).readlines() if line and line not in donotscan]
|
||||||
found = len(targets)
|
found = len(targets)
|
||||||
debug(f'loaded {found:,} targets')
|
debug(f'loaded {found:,} targets')
|
||||||
|
if settings.daemon:
|
||||||
|
try:
|
||||||
|
os.mkdir('backup')
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
targets = [target for target in targets if not os.path.isfile(f'logs/{target}.json')] # Do not scan targets we already have logged for
|
targets = [target for target in targets if not os.path.isfile(f'logs/{target}.json')] # Do not scan targets we already have logged for
|
||||||
if len(targets) < found:
|
if len(targets) < found:
|
||||||
debug(f'removed {found-len(targets):,} targets we already have logs for already')
|
debug(f'removed {found-len(targets):,} targets we already have logs for already')
|
||||||
del found, targets_file
|
del found, targets_file
|
||||||
|
while True:
|
||||||
random.shuffle(targets)
|
random.shuffle(targets)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.run_until_complete(main(targets))
|
loop.run_until_complete(main(targets))
|
||||||
debug('IRCP has finished probing!')
|
debug('IRCP has finished probing!')
|
||||||
|
if settings.daemon:
|
||||||
|
backup(time.strftime('%y%m%d-%H%M%S'))
|
||||||
|
else:
|
||||||
|
break
|
Loading…
Reference in New Issue
Block a user