| % 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 |
| |