Added open port alerts.
This commit is contained in:
parent
433776a98f
commit
4c3253e233
16
autorecon.py
16
autorecon.py
|
@ -436,7 +436,7 @@ async def scan_target(target):
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
info('Found {bmagenta}' + service.name + '{rst} on {bmagenta}' + service.protocol + '/' + str(service.port) + '{rst} on {byellow}' + target.address + '{rst}')
|
info('Identified service {bmagenta}' + service.name + '{rst} on {bmagenta}' + service.protocol + '/' + str(service.port) + '{rst} on {byellow}' + target.address + '{rst}')
|
||||||
|
|
||||||
if not config['only_scans_dir']:
|
if not config['only_scans_dir']:
|
||||||
with open(os.path.join(target.reportdir, 'notes.txt'), 'a') as file:
|
with open(os.path.join(target.reportdir, 'notes.txt'), 'a') as file:
|
||||||
|
@ -1026,9 +1026,9 @@ async def main():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if isinstance(ip, ipaddress.IPv4Address):
|
if isinstance(ip, ipaddress.IPv4Address):
|
||||||
autorecon.pending_targets.append(Target(ip_str, 'IPv4', 'ip', autorecon))
|
autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv4', 'ip', autorecon))
|
||||||
elif isinstance(ip, ipaddress.IPv6Address):
|
elif isinstance(ip, ipaddress.IPv6Address):
|
||||||
autorecon.pending_targets.append(Target(ip_str, 'IPv6', 'ip', autorecon))
|
autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv6', 'ip', autorecon))
|
||||||
else:
|
else:
|
||||||
fail('This should never happen unless IPv8 is invented.')
|
fail('This should never happen unless IPv8 is invented.')
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -1052,9 +1052,9 @@ async def main():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if isinstance(ip, ipaddress.IPv4Address):
|
if isinstance(ip, ipaddress.IPv4Address):
|
||||||
autorecon.pending_targets.append(Target(ip_str, 'IPv4', 'ip', autorecon))
|
autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv4', 'ip', autorecon))
|
||||||
elif isinstance(ip, ipaddress.IPv6Address):
|
elif isinstance(ip, ipaddress.IPv6Address):
|
||||||
autorecon.pending_targets.append(Target(ip_str, 'IPv6', 'ip', autorecon))
|
autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv6', 'ip', autorecon))
|
||||||
else:
|
else:
|
||||||
fail('This should never happen unless IPv8 is invented.')
|
fail('This should never happen unless IPv8 is invented.')
|
||||||
|
|
||||||
|
@ -1062,6 +1062,7 @@ async def main():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
addresses = socket.getaddrinfo(target, None, socket.AF_INET)
|
addresses = socket.getaddrinfo(target, None, socket.AF_INET)
|
||||||
|
ip = addresses[0][4][0]
|
||||||
|
|
||||||
found = False
|
found = False
|
||||||
for t in autorecon.pending_targets:
|
for t in autorecon.pending_targets:
|
||||||
|
@ -1072,10 +1073,11 @@ async def main():
|
||||||
if found:
|
if found:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
autorecon.pending_targets.append(Target(target, 'IPv4', 'hostname', autorecon))
|
autorecon.pending_targets.append(Target(target, ip, 'IPv4', 'hostname', autorecon))
|
||||||
except socket.gaierror:
|
except socket.gaierror:
|
||||||
try:
|
try:
|
||||||
addresses = socket.getaddrinfo(target, None, socket.AF_INET6)
|
addresses = socket.getaddrinfo(target, None, socket.AF_INET6)
|
||||||
|
ip = addresses[0][4][0]
|
||||||
|
|
||||||
found = False
|
found = False
|
||||||
for t in autorecon.pending_targets:
|
for t in autorecon.pending_targets:
|
||||||
|
@ -1086,7 +1088,7 @@ async def main():
|
||||||
if found:
|
if found:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
autorecon.pending_targets.append(Target(target, 'IPv6', 'hostname', autorecon))
|
autorecon.pending_targets.append(Target(target, ip, 'IPv6', 'hostname', autorecon))
|
||||||
except socket.gaierror:
|
except socket.gaierror:
|
||||||
error(target + ' does not appear to be a valid IP address, IP range, or resolvable hostname.')
|
error(target + ' does not appear to be a valid IP address, IP range, or resolvable hostname.')
|
||||||
errors = True
|
errors = True
|
||||||
|
|
|
@ -5,8 +5,9 @@ from autorecon.io import e, info
|
||||||
|
|
||||||
class Target:
|
class Target:
|
||||||
|
|
||||||
def __init__(self, address, ipversion, type, autorecon):
|
def __init__(self, address, ip, ipversion, type, autorecon):
|
||||||
self.address = address
|
self.address = address
|
||||||
|
self.ip = ip
|
||||||
self.ipversion = ipversion
|
self.ipversion = ipversion
|
||||||
self.type = type
|
self.type = type
|
||||||
self.autorecon = autorecon
|
self.autorecon = autorecon
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from autorecon.plugins import PortScan
|
from autorecon.plugins import PortScan
|
||||||
from autorecon.io import error
|
from autorecon.io import info, error
|
||||||
import os
|
import os, re
|
||||||
|
|
||||||
class QuickTCPPortScan(PortScan):
|
class QuickTCPPortScan(PortScan):
|
||||||
|
|
||||||
|
@ -36,7 +36,18 @@ class AllTCPPortScan(PortScan):
|
||||||
if target.ports: # Don't run this plugin if there are custom ports.
|
if target.ports: # Don't run this plugin if there are custom ports.
|
||||||
return []
|
return []
|
||||||
process, stdout, stderr = await target.execute('nmap {nmap_extra} -A --osscan-guess --version-all -p- -oN "{scandir}/_full_tcp_nmap.txt" -oX "{scandir}/xml/_full_tcp_nmap.xml" {address}', blocking=False)
|
process, stdout, stderr = await target.execute('nmap {nmap_extra} -A --osscan-guess --version-all -p- -oN "{scandir}/_full_tcp_nmap.txt" -oX "{scandir}/xml/_full_tcp_nmap.xml" {address}', blocking=False)
|
||||||
services = await target.extract_services(stdout)
|
services = []
|
||||||
|
while True:
|
||||||
|
line = await stdout.readline()
|
||||||
|
if line is not None:
|
||||||
|
match = re.search('^Discovered open port ([0-9]+)/tcp', line)
|
||||||
|
if match:
|
||||||
|
info('Discovered open port {bmagenta}tcp/' + match.group(1) + '{rst} on {byellow}' + target.address + '{rst}')
|
||||||
|
service = target.extract_service(line)
|
||||||
|
if service:
|
||||||
|
services.append(service)
|
||||||
|
else:
|
||||||
|
break
|
||||||
await process.wait()
|
await process.wait()
|
||||||
return services
|
return services
|
||||||
|
|
||||||
|
@ -59,7 +70,18 @@ class Top100UDPPortScan(PortScan):
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
process, stdout, stderr = await target.execute('nmap {nmap_extra} -sU -A --version-all --top-ports 100 -oN "{scandir}/_top_100_udp_nmap.txt" -oX "{scandir}/xml/_top_100_udp_nmap.xml" {address}', blocking=False)
|
process, stdout, stderr = await target.execute('nmap {nmap_extra} -sU -A --version-all --top-ports 100 -oN "{scandir}/_top_100_udp_nmap.txt" -oX "{scandir}/xml/_top_100_udp_nmap.xml" {address}', blocking=False)
|
||||||
services = await target.extract_services(stdout)
|
services = []
|
||||||
|
while True:
|
||||||
|
line = await stdout.readline()
|
||||||
|
if line is not None:
|
||||||
|
match = re.search('^Discovered open port ([0-9]+)/udp', line)
|
||||||
|
if match:
|
||||||
|
info('Discovered open port {bmagenta}udp/' + match.group(1) + '{rst} on {byellow}' + target.address + '{rst}')
|
||||||
|
service = target.extract_service(line)
|
||||||
|
if service:
|
||||||
|
services.append(service)
|
||||||
|
else:
|
||||||
|
break
|
||||||
await process.wait()
|
await process.wait()
|
||||||
return services
|
return services
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue