diff --git a/libnmap/diff.py b/libnmap/diff.py index 4a958f5..24477e3 100644 --- a/libnmap/diff.py +++ b/libnmap/diff.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- +from builtins import object class DictDiffer(object): """ Calculate the difference between two dictionaries as: diff --git a/libnmap/objects/cpe.py b/libnmap/objects/cpe.py index 3ab82cd..30b5e1f 100644 --- a/libnmap/objects/cpe.py +++ b/libnmap/objects/cpe.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- +from builtins import zip +from builtins import object class CPE(object): """ CPE class offers an API for basic CPE objects. @@ -15,7 +17,7 @@ def __init__(self, cpestring): 'update', 'edition', 'language'] self._cpedict = dict((k, '') for k in zk) splitup = cpestring.split(':') - self._cpedict.update(dict(zip(zk, splitup))) + self._cpedict.update(dict(list(zip(zk, splitup)))) @property def cpestring(self): diff --git a/libnmap/objects/host.py b/libnmap/objects/host.py index 671f6f4..e4f1fe1 100644 --- a/libnmap/objects/host.py +++ b/libnmap/objects/host.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from builtins import str +from builtins import object from libnmap.diff import NmapDiff from libnmap.objects.os import NmapOSFingerprint diff --git a/libnmap/objects/os.py b/libnmap/objects/os.py index cc795a7..c07d2de 100644 --- a/libnmap/objects/os.py +++ b/libnmap/objects/os.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from builtins import str +from builtins import object import warnings from libnmap.objects.cpe import CPE diff --git a/libnmap/objects/report.py b/libnmap/objects/report.py index 60a97a1..c6d9a2b 100644 --- a/libnmap/objects/report.py +++ b/libnmap/objects/report.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from builtins import str +from builtins import object from libnmap.diff import NmapDiff @@ -324,7 +326,7 @@ def is_consistent(self): rdata = self.get_raw_data() _consistent_keys = ['_nmaprun', '_scaninfo', '_hosts', '_runstats'] if(set(_consistent_keys) == set(rdata.keys()) and - len([dky for dky in rdata.keys() if rdata[dky] is not None]) == 4): + len([dky for dky in list(rdata.keys()) if rdata[dky] is not None]) == 4): rval = True return rval diff --git a/libnmap/objects/service.py b/libnmap/objects/service.py index 11d4726..8bfbaa1 100644 --- a/libnmap/objects/service.py +++ b/libnmap/objects/service.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from builtins import str +from builtins import object from libnmap.diff import NmapDiff from libnmap.objects.os import CPE @@ -219,7 +221,7 @@ def banner(self): 'servicefp', 'tunnel'] relevant = ['product', 'version', 'extrainfo'] b = '' - skeys = self._service.keys() + skeys = list(self._service.keys()) if 'method' in self._service and self._service['method'] == "probed": for relk in relevant: if relk in skeys: diff --git a/libnmap/parser.py b/libnmap/parser.py index 8331ef9..4813916 100644 --- a/libnmap/parser.py +++ b/libnmap/parser.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- +from builtins import object try: import xml.etree.cElementTree as ET except ImportError: @@ -79,7 +80,7 @@ def _parse_xml(cls, nmap_data=None, incomplete=False): if not nmap_data: raise NmapParserException("No report data to parse: please " "provide a valid XML nmap report") - elif not isinstance(nmap_data, str): + elif not isinstance(nmap_data, basestring): raise NmapParserException("wrong nmap_data type given as " "argument: cannot parse data") @@ -159,7 +160,7 @@ def parse_fromstring(cls, nmap_data, data_type="XML", incomplete=False): :return: NmapObject """ - if not isinstance(nmap_data, str): + if not isinstance(nmap_data, basestring): raise NmapParserException("bad argument type for " "xarse_fromstring(): should be a string") return cls.parse(nmap_data, data_type, incomplete) @@ -674,7 +675,7 @@ def __format_attributes(elt_data): "data attributes: format is not XML or " "XML tag is empty") try: - for dkey in elt_data.keys(): + for dkey in list(elt_data.keys()): rval[dkey] = elt_data.get(dkey) if rval[dkey] is None: raise NmapParserException("Error while trying to build-up " diff --git a/libnmap/plugins/backendplugin.py b/libnmap/plugins/backendplugin.py index 224cdd0..cea6efe 100644 --- a/libnmap/plugins/backendplugin.py +++ b/libnmap/plugins/backendplugin.py @@ -1,6 +1,7 @@ #!/usr/bin/env python +from builtins import object class NmapBackendPlugin(object): """ Abstract class showing to the minimal implementation for a plugin diff --git a/libnmap/plugins/backendpluginFactory.py b/libnmap/plugins/backendpluginFactory.py index b840363..ef34986 100644 --- a/libnmap/plugins/backendpluginFactory.py +++ b/libnmap/plugins/backendpluginFactory.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from builtins import object import sys import inspect diff --git a/libnmap/plugins/es.py b/libnmap/plugins/es.py index d0359b1..6466623 100644 --- a/libnmap/plugins/es.py +++ b/libnmap/plugins/es.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from __future__ import print_function import json from libnmap.reportjson import ReportEncoder from libnmap.plugins.backendplugin import NmapBackendPlugin diff --git a/libnmap/plugins/mongodb.py b/libnmap/plugins/mongodb.py index 657029d..e4979ac 100644 --- a/libnmap/plugins/mongodb.py +++ b/libnmap/plugins/mongodb.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from builtins import str import json from pymongo import MongoClient from bson.objectid import ObjectId diff --git a/libnmap/plugins/s3.py b/libnmap/plugins/s3.py index 5805daa..a731cd0 100644 --- a/libnmap/plugins/s3.py +++ b/libnmap/plugins/s3.py @@ -11,6 +11,7 @@ .. moduleauthor:: Ronald Bister .. moduleauthor:: Mike Boutillier """ +from builtins import str import json from bson.objectid import ObjectId from boto.s3.connection import S3Connection, OrdinaryCallingFormat diff --git a/libnmap/plugins/sql.py b/libnmap/plugins/sql.py index 57f1415..54cb966 100644 --- a/libnmap/plugins/sql.py +++ b/libnmap/plugins/sql.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from builtins import bytes from sqlalchemy import create_engine from sqlalchemy.schema import Column from sqlalchemy.types import Integer, DateTime, LargeBinary diff --git a/libnmap/process.py b/libnmap/process.py index 161aee5..5276d55 100644 --- a/libnmap/process.py +++ b/libnmap/process.py @@ -1,6 +1,10 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from __future__ import print_function +from builtins import range +from builtins import object +import future import os import shlex import subprocess @@ -57,7 +61,7 @@ class NmapProcess(Thread): """ def __init__(self, targets="127.0.0.1", - options="-sT", event_callback=None, safe_mode=True, fqp=None): + options="-sT", event_callback=None, safe_mode=True, fqp=None, using_proxychains=False, proxychains_config=None ): """ Constructor of NmapProcess class. @@ -100,11 +104,24 @@ def __init__(self, targets="127.0.0.1", self.__nmap_binary = self._whereis(nmap_binary_name) self.__nmap_fixed_options = "-oX - -vvv --stats-every 1s" + self.path_to_proxychains = None + if using_proxychains: + self.using_proxychains = True + self.path_to_proxychains = '/usr/bin/proxychains4 + else: + self.using_proxychains = False + + self.proxychains_config = None + if proxychains_config is not None: + self.proxychains_config = proxychains_config + else: + self.proxychains_config = None + if self.__nmap_binary is None: raise EnvironmentError(1, "nmap is not installed or could " "not be found in system path") - if isinstance(targets, str): + if isinstance(targets, basestring): self.__nmap_targets = targets.replace(" ", "").split(',') elif isinstance(targets, list): self.__nmap_targets = targets @@ -125,7 +142,7 @@ def __init__(self, targets="127.0.0.1", else: self.__nmap_event_callback = None (self.DONE, self.READY, self.RUNNING, - self.CANCELLED, self.FAILED) = range(5) + self.CANCELLED, self.FAILED) = list(range(5)) self._run_init() def _run_init(self): @@ -171,11 +188,20 @@ def get_command_line(self): :return: the full nmap command line to run :rtype: string """ - return ("{0} {1} {2} {3} {4}".format(self.__sudo_run, - self.__nmap_binary, - self.__nmap_fixed_options, - self.__nmap_dynamic_options, - " ".join(self.__nmap_targets))) + if self.using_proxychains: + return ("{0} -f {1} {2} {3} {4} {5} {6}".format( self.path_to_proxychains, + self.proxychains_config, + self.__sudo_run, + self.__nmap_binary, + self.__nmap_fixed_options, + self.__nmap_dynamic_options, + " ".join(self.__nmap_targets))) + else: + return ("{0} {1} {2} {3} {4}".format(self.__sudo_run, + self.__nmap_binary, + self.__nmap_fixed_options, + self.__nmap_dynamic_options, + " ".join(self.__nmap_targets))) def sudo_run(self, run_as='root'): """ @@ -363,30 +389,30 @@ def __process_event(self, eventdata): for xlmnt, xmlnode in edomdoc: if xlmnt is not None and xlmnt == pulldom.START_ELEMENT: if (xmlnode.nodeName == 'taskbegin' and - xmlnode.attributes.keys()): + list(xmlnode.attributes.keys())): xt = xmlnode.attributes taskname = xt['task'].value starttime = xt['time'].value xinfo = '' - if 'extrainfo' in xt.keys(): + if 'extrainfo' in list(xt.keys()): xinfo = xt['extrainfo'].value newtask = NmapTask(taskname, starttime, xinfo) self.__nmap_tasks[newtask.name] = newtask self.__current_task = newtask.name rval = True elif (xmlnode.nodeName == 'taskend' and - xmlnode.attributes.keys()): + list(xmlnode.attributes.keys())): xt = xmlnode.attributes tname = xt['task'].value xinfo = '' self.__nmap_tasks[tname].endtime = xt['time'].value - if 'extrainfo' in xt.keys(): + if 'extrainfo' in list(xt.keys()): xinfo = xt['extrainfo'].value self.__nmap_tasks[tname].extrainfo = xinfo self.__nmap_tasks[tname].status = "ended" rval = True elif (xmlnode.nodeName == 'taskprogress' and - xmlnode.attributes.keys()): + list(xmlnode.attributes.keys())): xt = xmlnode.attributes tname = xt['task'].value percent = xt['percent'].value @@ -400,12 +426,12 @@ def __process_event(self, eventdata): self.__nmap_tasks[tname].updated = updated rval = True elif (xmlnode.nodeName == 'nmaprun' and - xmlnode.attributes.keys()): + list(xmlnode.attributes.keys())): self.__starttime = xmlnode.attributes['start'].value self.__version = xmlnode.attributes['version'].value rval = True elif (xmlnode.nodeName == 'finished' and - xmlnode.attributes.keys()): + list(xmlnode.attributes.keys())): self.__endtime = xmlnode.attributes['time'].value self.__elapsed = xmlnode.attributes['elapsed'].value self.__summary = xmlnode.attributes['summary'].value @@ -608,15 +634,15 @@ def mycallback(nmapscan=None): event_callback=mycallback) rc = nm.run() if rc == 0: - print("Scan started at {0} nmap version: {1}").format(nm.starttime, - nm.version) - print("state: {0} (rc: {1})").format(nm.state, nm.rc) - print("results size: {0}").format(len(nm.stdout)) - print("Scan ended {0}: {1}").format(nm.endtime, nm.summary) + print(("Scan started at {0} nmap version: {1}").format(nm.starttime, + nm.version)) + print(("state: {0} (rc: {1})").format(nm.state, nm.rc)) + print(("results size: {0}").format(len(nm.stdout))) + print(("Scan ended {0}: {1}").format(nm.endtime, nm.summary)) else: - print("state: {0} (rc: {1})").format(nm.state, nm.rc) - print("Error: {stderr}").format(stderr=nm.stderr) - print("Result: {0}").format(nm.stdout) + print(("state: {0} (rc: {1})").format(nm.state, nm.rc)) + print(("Error: {stderr}").format(stderr=nm.stderr)) + print(("Result: {0}").format(nm.stdout)) if __name__ == '__main__': main() diff --git a/libnmap/test/process-stressbox/check_fqp_nmap.py b/libnmap/test/process-stressbox/check_fqp_nmap.py index cfd9db2..340eee5 100644 --- a/libnmap/test/process-stressbox/check_fqp_nmap.py +++ b/libnmap/test/process-stressbox/check_fqp_nmap.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +from __future__ import print_function +from builtins import str from libnmap.process import NmapProcess from libnmap.parser import NmapParser, NmapParserException diff --git a/libnmap/test/process-stressbox/multi_nmap_process.py b/libnmap/test/process-stressbox/multi_nmap_process.py index d861de3..7aba2bf 100644 --- a/libnmap/test/process-stressbox/multi_nmap_process.py +++ b/libnmap/test/process-stressbox/multi_nmap_process.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import print_function +from builtins import range from libnmap.process import NmapProcess def make_nmproc_obj(targets, options): diff --git a/libnmap/test/process-stressbox/multi_nmap_process_background.py b/libnmap/test/process-stressbox/multi_nmap_process_background.py index 1e2faef..6631785 100644 --- a/libnmap/test/process-stressbox/multi_nmap_process_background.py +++ b/libnmap/test/process-stressbox/multi_nmap_process_background.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import print_function +from builtins import range from libnmap.process import NmapProcess from time import sleep diff --git a/libnmap/test/process-stressbox/proc_async.py b/libnmap/test/process-stressbox/proc_async.py index f588d2f..c6a45a6 100644 --- a/libnmap/test/process-stressbox/proc_async.py +++ b/libnmap/test/process-stressbox/proc_async.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +from __future__ import print_function from libnmap.process import NmapProcess from time import sleep diff --git a/libnmap/test/process-stressbox/proc_nmap_like.py b/libnmap/test/process-stressbox/proc_nmap_like.py index 5399b66..caba69a 100644 --- a/libnmap/test/process-stressbox/proc_nmap_like.py +++ b/libnmap/test/process-stressbox/proc_nmap_like.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +from __future__ import print_function +from builtins import str from libnmap.process import NmapProcess from libnmap.parser import NmapParser, NmapParserException diff --git a/libnmap/test/process-stressbox/stop_scan.py b/libnmap/test/process-stressbox/stop_scan.py index 10c01bd..8cc6d11 100644 --- a/libnmap/test/process-stressbox/stop_scan.py +++ b/libnmap/test/process-stressbox/stop_scan.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +from __future__ import print_function from libnmap.process import NmapProcess from time import sleep diff --git a/libnmap/test/process-stressbox/stressback.py b/libnmap/test/process-stressbox/stressback.py index ee14edc..21528e0 100644 --- a/libnmap/test/process-stressbox/stressback.py +++ b/libnmap/test/process-stressbox/stressback.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import print_function +from builtins import range from libnmap.process import NmapProcess from time import sleep diff --git a/libnmap/test/process-stressbox/stresstest.py b/libnmap/test/process-stressbox/stresstest.py index 6de045a..d5f6869 100644 --- a/libnmap/test/process-stressbox/stresstest.py +++ b/libnmap/test/process-stressbox/stresstest.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from __future__ import print_function from libnmap.process import NmapProcess from libnmap.parser import NmapParser, NmapParserException diff --git a/libnmap/test/test_backend_plugin_factory.py b/libnmap/test/test_backend_plugin_factory.py index 2573c67..04773bb 100644 --- a/libnmap/test/test_backend_plugin_factory.py +++ b/libnmap/test/test_backend_plugin_factory.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest import os from libnmap.parser import NmapParser @@ -161,5 +162,5 @@ def test_backend_delete(self): 'test_backend_getall', 'test_backend_delete' ] - suite = unittest.TestSuite(map(TestNmapBackendPlugin, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapBackendPlugin, test_suite))) test_result = unittest.TextTestRunner(verbosity=5).run(suite) diff --git a/libnmap/test/test_cpe.py b/libnmap/test/test_cpe.py index 06d1ae2..9bf9401 100644 --- a/libnmap/test/test_cpe.py +++ b/libnmap/test/test_cpe.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map from libnmap.objects.os import CPE import unittest @@ -58,5 +59,5 @@ def test_full_cpe(self): if __name__ == '__main__': test_suite = ['test_cpe', 'test_full_cpe'] - suite = unittest.TestSuite(map(TestNmapFP, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapFP, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_fp.py b/libnmap/test/test_fp.py index ec30bcb..6e3eea4 100644 --- a/libnmap/test/test_fp.py +++ b/libnmap/test/test_fp.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest import os from libnmap.parser import NmapParser @@ -142,5 +143,5 @@ def test_os_class_probabilities(self): if __name__ == '__main__': test_suite = ['test_fp', 'test_fpv6', 'test_osmatches_new', 'test_osclasses_new', 'test_fpv5', 'test_osmatches_old', 'test_cpeservice', 'test_os_class_probabilities'] - suite = unittest.TestSuite(map(TestNmapFP, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapFP, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_host.py b/libnmap/test/test_host.py index 7e90535..f8b3cef 100644 --- a/libnmap/test/test_host.py +++ b/libnmap/test/test_host.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest from libnmap.parser import NmapParser @@ -227,5 +228,5 @@ def test_diff_host(self): if __name__ == '__main__': test_suite = ['test_eq_host', 'test_host_api', 'test_diff_host'] - suite = unittest.TestSuite(map(TestNmapHost, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapHost, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_new_parser.py b/libnmap/test/test_new_parser.py index a863c5b..21662a6 100644 --- a/libnmap/test/test_new_parser.py +++ b/libnmap/test/test_new_parser.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest from libnmap.parser import NmapParser, NmapParserException @@ -21,5 +22,5 @@ def test_parse(self): if __name__ == '__main__': test_suite = ['test_parse'] - suite = unittest.TestSuite(map(TestNmapParser, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapParser, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_parser.py b/libnmap/test/test_parser.py index d940969..20204ac 100644 --- a/libnmap/test/test_parser.py +++ b/libnmap/test/test_parser.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from __future__ import print_function +from builtins import map import unittest import os from libnmap.parser import NmapParser, NmapParserException @@ -179,5 +181,5 @@ def test_parser_generic(self): test_suite = ['test_class_parser', 'test_class_ports_parser', 'test_class_port_parser', 'test_port_except', 'test_parser_generic'] - suite = unittest.TestSuite(map(TestNmapParser, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapParser, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_report.py b/libnmap/test/test_report.py index 8e1740e..1fbb4b0 100644 --- a/libnmap/test/test_report.py +++ b/libnmap/test/test_report.py @@ -1,6 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map +from builtins import str +from builtins import range import unittest import os @@ -230,5 +233,5 @@ def test_host_address_unchanged(self): 'test_host_equal', 'test_host_address_changed', 'test_host_address_unchanged'] - suite = unittest.TestSuite(map(TestNmapParser, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapParser, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_report_diff.py b/libnmap/test/test_report_diff.py index d052b7e..cdcb95c 100644 --- a/libnmap/test/test_report_diff.py +++ b/libnmap/test/test_report_diff.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest import os from libnmap.parser import NmapParser @@ -60,5 +61,5 @@ def test_diff_host_list(self): if __name__ == '__main__': test_suite = ['test_diff_host_list'] - suite = unittest.TestSuite(map(TestNmapReportDiff, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapReportDiff, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/libnmap/test/test_service.py b/libnmap/test/test_service.py index 4d0ec01..ff646c4 100644 --- a/libnmap/test/test_service.py +++ b/libnmap/test/test_service.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from builtins import map import unittest from libnmap.parser import NmapParser from libnmap.diff import NmapDiffException @@ -257,5 +258,5 @@ def test_tunnel(self): test_suite = ['test_port_state_changed', 'test_port_state_unchanged', 'test_port_service_changed', 'test_eq_service', 'test_diff_service'] - suite = unittest.TestSuite(map(TestNmapService, test_suite)) + suite = unittest.TestSuite(list(map(TestNmapService, test_suite))) test_result = unittest.TextTestRunner(verbosity=2).run(suite)