#!/usr/bin/python3 from argparse import ArgumentParser from AnmapThread import AnmapThread, MasscanThread from AnmapResult import AnmapResult 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 10 and scans only the first 100 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 = 10 result = AnmapResult() try: c = "" try: ms = args.masscan except AttributeError: ms = False ports = "1-100" if args.debug else "-" if ms: tm = MasscanThread(args.HOST, ports, args.verbose, args.output) tm.start() tm.join() c = input("Do you want to continue without a full nmap scan? (y/N)") if c != "y": t0 = AnmapThread(args.HOST, ports, args.verbose, args.output, result, "quick") t0.start() t0.join() else: t0 = AnmapThread(args.HOST, ports, args.verbose, args.output, result, "quick") t0.start() t0.join() # Starting thorough and udp scan for each host in separate threads thread_list = list() for name, host in result.items(): thread_list.append(AnmapThread(name, host.services_tcp.keys(), args.verbose, args.output, result, "tcp")) thread_list.append(AnmapThread(name, args.udp, args.verbose, args.output, result, "udp")) for t in thread_list: t.start() # Waiting for the threads to finish for t in thread_list: t.join() result.print() except KeyboardInterrupt: print("User Interrupt")