% Regression tests for Scapy Nmap module ~ nmap ############ ############ + Basic Nmap OS fingerprints tests = Module loading load_module('nmap') = Test functions d = nmap_udppacket_sig(IP()/UDP(), IP(raw(IP()/ICMP(type=3, code=2)/IPerror()/UDPerror()))) assert len(d) == 9 d = nmap_tcppacket_sig(IP()/TCP()) assert len(d) == 5 = Fetch database ~ netaccess try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen filename = 'nmap-os-fingerprints' + str(RandString(6)) def _test(): with open(filename, 'wb') as fd: fd.write(urlopen('https://raw.githubusercontent.com/nmap/nmap/9efe1892/nmap-os-fingerprints').read()) retry_test(_test) conf.nmap_base = filename = Database loading ~ netaccess print(conf.nmap_kdb.base, conf.nmap_kdb.filename, len(conf.nmap_kdb.get_base())) assert len(conf.nmap_kdb.get_base()) > 100 = fingerprint test: www.secdev.org ~ netaccess needs_root with no_debug_dissector(): score, fprint = nmap_fp('www.secdev.org') print(score, fprint) assert score > 0.5 assert fprint = fingerprint test: gateway ~ netaccess needs_root with no_debug_dissector(): score, fprint = nmap_fp(conf.route.route('0.0.0.0')[2]) print(score, fprint) assert score > 0.5 assert fprint = fingerprint test: to text ~ netaccess needs_root import re as re_ with no_debug_dissector(): a = nmap_sig("www.secdev.org", 80, 81) a for x in nmap_sig2txt(a).split("\n"): assert re_.match(r"\w{2,4}\(.*\)", x) = nmap_udppacket_sig test: www.google.com ~ netaccess needs_root with no_debug_dissector(): a = nmap_sig("www.google.com", ucport=80) assert len(a) > 3 assert len(a["PU"]) > 0 + Nmap errors triggering = Nmap base not available conf.nmap_kdb.filename = "invalid" conf.nmap_kdb.reload() assert conf.nmap_kdb.filename == None = Clear temp files try: os.remove(filename) except: pass