#!/usr/bin/python3
from argparse import ArgumentParser
from AnmapThread import UDPAnmapThread , ThoroughAnmapThread , BaseAnmapThread , MasscanAnmapThread
if __name__ == " __main__ " :
# Argument parsing
ap = ArgumentParser ( description = " This script automates nmap scans by quickly scanning all TCP ports first and "
" executing a thorough scan on all ports found open afterwards. "
" Additionally it scans a given number of most used UDP ports. " ,
prog = " anmap.py " )
ap . add_argument ( " -u " , " --udp " , default = 1000 , type = int , help = " The number of UDP ports to scan (Default 1000) " )
ap . add_argument ( " -v " , " --verbose " , action = " store_true " , help = " This enables verbose output " )
# Not functional yet
# ap.add_argument("-m", "--masscan", action="store_true", help="This enables masscan for first scan")
ap . add_argument ( " -d " , " --debug " , action = " store_true " ,
help = " Sets flags -v and -u 100 and scans only the first 1000 tcp ports " )
ap . add_argument ( " -o " , " --output " , action = " store_true " , help = " Enables saving of output files " )
ap . add_argument ( " HOST " , type = str , help = " The hosts to scan (Same notations as in nmap possible) " )
args = ap . parse_args ( )
if args . debug :
args . verbose = True
args . udp = 100
try :
c = host_dict = " "
try :
ms = args . masscan
except AttributeError :
ms = False
if ms :
tm = MasscanAnmapThread ( args . HOST , " 1-1000 " if args . debug else " - " , args . verbose , args . output )
tm . start ( )
host_dict = tm . rjoin ( )
c = input ( " Do you want to continue without a full nmap scan? (y/N) " )
if c != " y " :
t0 = BaseAnmapThread ( args . HOST , " 1-1000 " if args . debug else " - " , args . verbose , args . output )
t0 . start ( )
host_dict = t0 . rjoin ( )
else :
t0 = BaseAnmapThread ( args . HOST , " 1-1000 " if args . debug else " - " , args . verbose , args . output )
t0 . start ( )
host_dict = t0 . rjoin ( )
# Starting thorough and udp scan for each host in separate threads
thread_list = list ( )
for host , open_port_list in host_dict . items ( ) :
thread_list . append ( ThoroughAnmapThread ( host , open_port_list , args . verbose , args . output ) )
thread_list . append ( UDPAnmapThread ( host , args . udp , args . verbose , args . output ) )
for t in thread_list :
t . start ( )
# Waiting for the threads to finish
for t in thread_list :
t . join ( )
except KeyboardInterrupt :
print ( " User Interrupt " )