From 281f4cb7696cc206333fecd1b5feb0ad8e041b95 Mon Sep 17 00:00:00 2001 From: MrMcX Date: Mon, 28 May 2018 21:31:00 +0200 Subject: [PATCH] xml-output added, .gitignore and README.md updated --- .gitignore | 6 ++++++ README.md | 32 ++++++++++++++++++------------ anmap.py | 57 ++++++++++++++++++++++++++++++++++-------------------- 3 files changed, 62 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 6a18ad4..813f9fa 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,9 @@ ENV/ # Rope project settings .ropeproject +# Pycharm +.idea + +# nmap output +*.xml +*.gnmap \ No newline at end of file diff --git a/README.md b/README.md index 557d181..73b6e4b 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,25 @@ # Anmap - Automatic nmap Scanner -``` -usage: anmap.py [-h] [-u U] [-v] HOST +Prerequisites: +* Python 3.6 (https://www.python.org/downloads/) +* python-nmap (https://xael.org/pages/python-nmap-en.html) +* nmap (https://nmap.org/) -This script automates nmap scans by quickly scanning all TCP ports first and +``` +usage: anmap.py [-h] [-u UDP] [-v] [-d] [-o] HOST + +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. - -positional arguments: - HOST The hosts to scan (Same notations as in nmap possible) - -optional arguments: - -h, --help show this help message and exit - -u U The number of UDP ports to scan (Default 1000) - -v This enables verbose output +scans a given number of most used UDP ports. + +positional arguments: + HOST The hosts to scan (Same notations as in nmap possible) + +optional arguments: + -h, --help show this help message and exit + -u UDP, --udp UDP The number of UDP ports to scan (Default 1000) + -v, --verbose This enables verbose output + -d, --debug Sets flags -v and -u 100 and scans only the first 1000 + tcp ports + -o, --output Enables saving of output files ``` \ No newline at end of file diff --git a/anmap.py b/anmap.py index c1cb4b8..33c35ff 100644 --- a/anmap.py +++ b/anmap.py @@ -19,12 +19,15 @@ class ThoroughAnmapThread(AnmapThread): def run(self): self.logger.log("Starting thorough scan on " + self.host) self.nm.scan(self.host, "1," + ",".join(self.ports), - arguments='-sSVC -A -Pn{}'.format(output_argument(self.out, self.host, 2))) + arguments='-sSVC -A -Pn{}'.format(output(self.out, self.host, 2))) + if self.out: + with open(output(True, self.host, 5), "w") as out: + out.write(self.nm.get_nmap_last_output()) host = self.nm[self.host] for p in host.all_tcp(): if p == 1: continue - print("Port {}/tcp: {}".format(p, host['tcp'][p])) + self.logger.log("Port {}/tcp: {}".format(p, host['tcp'][p])) self.logger.log("Finished thorough scan on " + self.host) @@ -32,10 +35,13 @@ class UDPAnmapThread(AnmapThread): def run(self): self.logger.log("Starting UDP scan on " + self.host) self.nm.scan(self.host, arguments='-sVCU -A -Pn --top-ports {}{}'. - format(self.ports, output_argument(self.out, self.host, 3))) + format(self.ports, output(self.out, self.host, 3))) + if self.out: + with open(output(True, self.host, 6), "w") as out: + out.write(self.nm.get_nmap_last_output()) host = self.nm[self.host] for p in host.all_udp(): - print("Port {}/udp: {}".format(p, host['udp'][p])) + self.logger.log("Port {}/udp: {}".format(p, host['udp'][p])) self.logger.log("Finished UDP scan on " + self.host) @@ -54,32 +60,41 @@ def date(long=False): return datetime.now().strftime("%Y-%m-%d_%H%M") -def output_argument(o, host, st): +def output(o, host, st): host = host.replace("/", "x") host = host.replace(" ", "") if not o: return "" if st == 1: - return " -oG nmap_{}_S_{}".format(host, date()) + return " -oG nmap_{}_S_{}.gnmap".format(host, date()) if st == 2: - return " -oG nmap_{}_SVCA_{}".format(host, date()) + return " -oG nmap_{}_SVCA_{}.gnmap".format(host, date()) if st == 3: - return " -oG nmap_{}_VCUA_{}".format(host, date()) + return " -oG nmap_{}_VCUA_{}.gnmap".format(host, date()) + if st == 4: + return "nmap_{}_S_{}.xml".format(host, date()) + if st == 5: + return "nmap_{}_SVCA_{}.xml".format(host, date()) + if st == 6: + return "nmap_{}_VCUA_{}.xml".format(host, date()) def run(args): - if args.d: - args.v = True - args.u = 100 - l = Logger(args.v) + if args.debug: + args.verbose = True + args.udp = 100 + l = Logger(args.verbose) # Scanning all tcp ports nm = PortScanner() l.log("Starting quick scan") - if args.d: - nm.scan(args.HOST, arguments='-sS -Pn -p1-1000{}'.format(output_argument(args.o, args.HOST, 1))) + if args.debug: + nm.scan(args.HOST, arguments='-sS -Pn -p1-1000{}'.format(output(args.output, args.HOST, 1))) else: - nm.scan(args.HOST, arguments='-sS -Pn -p-{}'.format(output_argument(args.o, args.HOST, 1))) + nm.scan(args.HOST, arguments='-sS -Pn -p-{}'.format(output(args.output, args.HOST, 1))) + if args.output: + with open(output(True, args.HOST, 4), "w") as out: + out.write(nm.get_nmap_last_output()) l.log("Finished quick scan") host_list = dict() for hostname in nm.all_hosts(): @@ -94,10 +109,10 @@ def run(args): # Starting thorough and udp scan in separate threads thread_list = [] for host, open_port_list in host_list.items(): - t1 = ThoroughAnmapThread(host, open_port_list, l, args.o) + t1 = ThoroughAnmapThread(host, open_port_list, l, args.output) t1.start() thread_list.append(t1) - t2 = UDPAnmapThread(host, args.u, l, args.o) + t2 = UDPAnmapThread(host, args.udp, l, args.output) t2.start() thread_list.append(t2) @@ -112,11 +127,11 @@ if __name__ == "__main__": "executing a thorough scan on all ports found open afterwards. " "Additionally it scans a given number of most used UDP ports.", prog="anmap.py") - parser.add_argument("-u", default=1000, type=int, help="The number of UDP ports to scan (Default 1000)") - parser.add_argument("-v", action="store_true", help="This enables verbose output") - parser.add_argument("-d", action="store_true", + parser.add_argument("-u", "--udp", default=1000, type=int, help="The number of UDP ports to scan (Default 1000)") + parser.add_argument("-v", "--verbose", action="store_true", help="This enables verbose output") + parser.add_argument("-d", "--debug", action="store_true", help="Sets flags -v and -u 100 and scans only the first 1000 tcp ports") - parser.add_argument("-o", action="store_true", help="Enables saving of output files") + parser.add_argument("-o", "--output", action="store_true", help="Enables saving of output files") parser.add_argument("HOST", type=str, help="The hosts to scan (Same notations as in nmap possible)") try: