#!/usr/bin/env python # recheck.py # Checks each print in nmap.groups against the model and prints out the result. # Columns: # print_line_number group_number_matched prob_score novelty correctly_classified group_name import parse import predict def do_predict(p, g, gn, m, ln): rs = parse.ResponseSet() rs.parse_nmapfp_string("".join(p)) correct, guesses = predict.predict(rs, m) for n, prob, desc, novelty in guesses[:1]: #if gn != n + 1: # print "%d %2d. %5.2f%% %6.2f %s" % (ln, n+1, prob * 100, novelty, desc.nmapname) print "%d %2d. %5.2f%% %6.2f %s %s" % (ln, n+1, prob * 100, novelty, gn == n+1, desc.nmapname) if __name__ == "__main__": model = parse.parse_model_file("nmap.model") with open("nmap.groups", "rb") as ng: ln = 0 g = None gn = 0 p = None pn = 0 for line in ng: ln = ln + 1 if line.startswith("group "): if p: do_predict(p, g, gn, model, pn) p = None g = line gn = gn + 1 print "\n{} {}: {}".format(ln, gn, g.rstrip()) elif line.startswith("print"): if p: do_predict(p, g, gn, model, pn) p = None p = [] pn = ln elif p is not None: if not line.startswith("#"): p.append(line)