def displayfunction(x): return displayfunction_explain(x, db.view)
def main() -> None: displayfunction: Callable[[DBCursor], None] parser = argparse.ArgumentParser( description="Print out views.", parents=[db.view.argparser, CLI_ARGPARSER], ) flt = db.view.flt_empty parser.add_argument("--verbose", "-v", action="store_true", help="Print out formatted results.") parser.add_argument( "--no-screenshots", action="store_true", help="When used with --json, do not output " "screenshots data.", ) parser.add_argument("--honeyd", action="store_true", help="Output results as a honeyd config file.") parser.add_argument( "--nmap-xml", action="store_true", help="Output results as a nmap XML output file.", ) parser.add_argument( "--gnmap", action="store_true", help="Output results as a nmap grepable output file.", ) parser.add_argument( "--graphroute", choices=["dot", "rtgraph3d"] if graphroute.HAVE_DBUS else ["dot"], help="Create a graph from traceroute results. " 'dot: output result as Graphviz "dot" format to stdout.' "%s" % (" rtgraph3d: send results to rtgraph3d." if graphroute.HAVE_DBUS else ""), ) parser.add_argument( "--graphroute-cluster", choices=["AS", "Country"], help="Cluster IP according to the specified criteria" "(only for --graphroute dot)", ) if graphroute.HAVE_DBUS: parser.add_argument( "--graphroute-dont-reset", action="store_true", help="Do NOT reset graph (only for " "--graphroute rtgraph3d)", ) parser.add_argument( "--graphroute-include", choices=["last-hop", "target"], help="How far should graphroute go? Default if to " "exclude the last hop and the target for each result.", ) parser.add_argument( "--top", metavar="FIELD / ~FIELD", help="Output most common (least common: ~) values for " "FIELD, by default 10, use --limit to change that, " "--limit 0 means unlimited.", ) parser.add_argument( "--csv", metavar="TYPE", help="Output result as a CSV file", choices=["ports", "hops"], ) parser.add_argument( "--csv-separator", metavar="SEPARATOR", default=",", help="Select separator for --csv output", ) parser.add_argument( "--csv-add-infos", action="store_true", help="Include country_code and as_number" "fields to CSV file", ) parser.add_argument( "--csv-na-str", default="NA", help='String to use for "Not Applicable" value ' '(defaults to "NA")', ) args = parser.parse_args() flt = db.view.parse_args(args) if args.init: if os.isatty(sys.stdin.fileno()): sys.stdout.write( "This will remove any view in your database. Process ? [y/N] ") ans = input() if ans.lower() not in ["y", "yes"]: sys.exit(0) db.view.init() sys.exit(0) if args.ensure_indexes: if os.isatty(sys.stdin.fileno()): sys.stdout.write("This will lock your database. " "Process ? [y/N] ") ans = input() if ans.lower() != "y": sys.exit(-1) db.view.ensure_indexes() sys.exit(0) if args.top is not None: sys.stdout.writelines(db.view.display_top(args.top, flt, args.limit)) sys.exit(0) if args.sort is not None: sortkeys = [(field[1:], -1) if field.startswith("~") else (field, 1) for field in args.sort] else: sortkeys = [] if args.short: display_short(db.view, flt, sortkeys, args.limit, args.skip) sys.exit(0) if args.distinct is not None: display_distinct(db.view, args.distinct, flt, sortkeys, args.limit, args.skip) sys.exit(0) if args.explain: displayfunction_explain(flt, db.view) sys.exit(0) if args.delete: displayfunction_remove(flt, db.view) sys.exit(0) if args.json: def displayfunction(cur: DBCursor) -> None: return displayfunction_json(cur, db.view, args.no_screenshots) elif args.honeyd: displayfunction = displayfunction_honeyd elif args.http_urls: displayfunction = displayfunction_http_urls elif args.nmap_xml: displayfunction = displayfunction_nmapxml elif args.gnmap: displayfunction = displayfunction_gnmap elif args.graphroute is not None: def displayfunction(cur: DBCursor) -> None: return displayfunction_graphroute( cur, args.graphroute, args.graphroute_cluster, args.graphroute_include, args.graphroute_dont_reset, ) elif args.csv is not None: def displayfunction(cur: DBCursor) -> None: return displayfunction_csv(cur, args.csv, args.csv_separator, args.csv_na_str, args.csv_add_infos) else: def displayfunction(cur: DBCursor) -> None: displayhosts(cur, out=sys.stdout) if args.update_schema: db.view.migrate_schema(args.version) elif args.count: sys.stdout.write(str(db.view.count(flt)) + "\n") else: kargs = {} if args.limit is not None: kargs["limit"] = args.limit if args.skip is not None: kargs["skip"] = args.skip if sortkeys: kargs["sort"] = sortkeys cursor = db.view.get(flt, **kargs) displayfunction(cursor) sys.exit(0)
def main(): if USING_ARGPARSE: parser = argparse.ArgumentParser( description='Print out views.', parents=[db.view.argparser, CLI_ARGPARSER]) else: parser = optparse.OptionParser( description='Print out views.') for args, kargs in chain(db.view.argparser.args, CLI_ARGPARSER): parser.add_option(*args, **kargs) parser.parse_args_orig = parser.parse_args def my_parse_args(): res = parser.parse_args_orig() res[0].ensure_value('ips', res[1]) return res[0] parser.parse_args = my_parse_args parser.add_argument = parser.add_option flt = db.view.flt_empty parser.add_argument('--verbose', '-v', action='store_true', help='Print out formatted results.') parser.add_argument('--no-screenshots', action='store_true', help='When used with --json, do not output ' 'screenshots data.') parser.add_argument('--honeyd', action='store_true', help='Output results as a honeyd config file.') parser.add_argument('--nmap-xml', action='store_true', help='Output results as a nmap XML output file.') parser.add_argument('--gnmap', action='store_true', help='Output results as a nmap grepable output file.') parser.add_argument( '--graphroute', choices=["dot", "rtgraph3d"] if graphroute.HAVE_DBUS else ["dot"], help='Create a graph from traceroute results. ' 'dot: output result as Graphviz "dot" format to stdout.' '%s' % (" rtgraph3d: send results to rtgraph3d." if graphroute.HAVE_DBUS else "") ) parser.add_argument('--graphroute-cluster', choices=['AS', 'Country'], help='Cluster IP according to the specified criteria' '(only for --graphroute dot)') if graphroute.HAVE_DBUS: parser.add_argument('--graphroute-dont-reset', action='store_true', help='Do NOT reset graph (only for ' '--graphroute rtgraph3d)') parser.add_argument('--graphroute-include', choices=['last-hop', 'target'], help='How far should graphroute go? Default if to ' 'exclude the last hop and the target for each result.') parser.add_argument('--top', metavar='FIELD / ~FIELD', help='Output most common (least common: ~) values for ' 'FIELD, by default 10, use --limit to change that, ' '--limit 0 means unlimited.') parser.add_argument('--csv', metavar='TYPE', help='Output result as a CSV file', choices=['ports', 'hops']) parser.add_argument('--csv-separator', metavar='SEPARATOR', default=",", help='Select separator for --csv output') parser.add_argument('--csv-add-infos', action='store_true', help="Include country_code and as_number" "fields to CSV file") parser.add_argument('--csv-na-str', default="NA", help='String to use for "Not Applicable" value ' '(defaults to "NA")') args = parser.parse_args() flt = db.view.parse_args(args) if args.init: if os.isatty(sys.stdin.fileno()): sys.stdout.write( 'This will remove any view in your database. Process ? [y/N] ' ) ans = input() if ans.lower() not in ['y', 'yes']: exit(0) db.view.init() exit(0) if args.top is not None: display_top(db.view, args.top, flt, args.limit) sys.exit(0) if args.sort is not None: sortkeys = [(field[1:], -1) if field.startswith('~') else (field, 1) for field in args.sort] else: sortkeys = [] if args.short: display_short(db.view, flt, sortkeys, args.limit, args.skip) sys.exit(0) if args.distinct is not None: display_distinct(db.view, args.distinct, flt, sortkeys, args.limit, args.skip) sys.exit(0) if args.explain: displayfunction_explain(flt, db.view) sys.exit(0) if args.json: def displayfunction(x): return displayfunction_json( x, db.view, args.no_screenshots ) elif args.honeyd: displayfunction = displayfunction_honeyd elif args.nmap_xml: displayfunction = displayfunction_nmapxml elif args.gnmap: displayfunction = displayfunction_gnmap elif args.graphroute is not None: def displayfunction(x): return displayfunction_graphroute( x, args.graphroute, args.graphroute_include, args.graphroute_dont_reset ) elif args.delete: def displayfunction(x): return displayfunction_remove(x, db.view) elif args.csv is not None: def displayfunction(x): return displayfunction_csv( x, args.csv, args.csv_separator, args.csv_na_str, args.csv_add_infos ) else: def displayfunction(cursor): displayhosts(cursor, out=sys.stdout) if args.update_schema: db.db.nmap.migrate_schema(args.version) elif args.count: sys.stdout.write( str(db.view.count(flt)) + '\n' ) else: kargs = {} if args.limit is not None: kargs["limit"] = args.limit if args.skip is not None: kargs["skip"] = args.skip if sortkeys: kargs["sort"] = sortkeys cursor = db.view.get(flt, **kargs) displayfunction(cursor) sys.exit(0)
def main(): parser = argparse.ArgumentParser( description='Access and query the active scans database.', parents=[db.db.nmap.argparser, CLI_ARGPARSER], ) parser.add_argument('--no-screenshots', action='store_true', help='When used with --json, do not output ' 'screenshots data.') parser.add_argument('--honeyd', action='store_true', help='Output results as a honeyd config file.') parser.add_argument('--nmap-xml', action='store_true', help='Output results as a nmap XML output file.') parser.add_argument('--gnmap', action='store_true', help='Output results as a nmap grepable output file.') parser.add_argument( '--graphroute', choices=["dot", "rtgraph3d"] if graphroute.HAVE_DBUS else ["dot"], help='Create a graph from traceroute results. ' 'dot: output result as Graphviz "dot" format to stdout.' '%s' % (" rtgraph3d: send results to rtgraph3d." if graphroute.HAVE_DBUS else "")) parser.add_argument('--graphroute-cluster', choices=['AS', 'Country'], help='Cluster IP according to the specified criteria' '(only for --graphroute dot)') if graphroute.HAVE_DBUS: parser.add_argument('--graphroute-dont-reset', action='store_true', help='Do NOT reset graph (only for ' '--graphroute rtgraph3d)') parser.add_argument('--graphroute-include', choices=['last-hop', 'target'], help='How far should graphroute go? Default if to ' 'exclude the last hop and the target for each result.') parser.add_argument('--top', metavar='FIELD / ~FIELD', help='Output most common (least common: ~) values for ' 'FIELD, by default 10, use --limit to change that, ' '--limit 0 means unlimited.') parser.add_argument('--csv', metavar='TYPE', help='Output result as a CSV file', choices=['ports', 'hops']) parser.add_argument('--csv-separator', metavar='SEPARATOR', default=",", help='Select separator for --csv output') parser.add_argument('--csv-add-infos', action='store_true', help="Include country_code and as_number" "fields to CSV file") parser.add_argument('--csv-na-str', default="NA", help='String to use for "Not Applicable" value ' '(defaults to "NA")') args = parser.parse_args() out = sys.stdout hostfilter = db.db.nmap.parse_args(args) sortkeys = [] if args.init: if os.isatty(sys.stdin.fileno()): sys.stdout.write( 'This will remove any scan result in your database. ' 'Process ? [y/N] ') ans = input() if ans.lower() != 'y': sys.exit(-1) db.db.nmap.init() sys.exit(0) if args.ensure_indexes: if os.isatty(sys.stdin.fileno()): sys.stdout.write('This will lock your database. ' 'Process ? [y/N] ') ans = input() if ans.lower() != 'y': sys.exit(-1) db.db.nmap.ensure_indexes() sys.exit(0) if args.top is not None: display_top(db.db.nmap, args.top, hostfilter, args.limit) sys.exit(0) if args.sort is not None: sortkeys = [(field[1:], -1) if field.startswith('~') else (field, 1) for field in args.sort] if args.short: display_short(db.db.nmap, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) if args.distinct is not None: display_distinct(db.db.nmap, args.distinct, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) if args.explain: displayfunction_explain(hostfilter, db.db.nmap) sys.exit(0) if args.delete: displayfunction_remove(hostfilter, db.db.nmap) sys.exit(0) if args.json: def displayfunction(x): return displayfunction_json(x, db.db.nmap, args.no_screenshots) elif args.honeyd: displayfunction = displayfunction_honeyd elif args.nmap_xml: displayfunction = displayfunction_nmapxml elif args.gnmap: displayfunction = displayfunction_gnmap elif args.graphroute is not None: def displayfunction(x): return displayfunction_graphroute(x, args.graphroute, args.graphroute_include, args.graphroute_dont_reset) elif args.csv is not None: def displayfunction(x): return displayfunction_csv(x, args.csv, args.csv_separator, args.csv_na_str, args.csv_add_infos) else: def displayfunction(cursor): nmapout.displayhosts(cursor, out=out) if args.update_schema: db.db.nmap.migrate_schema(args.version) elif args.count: out.write(str(db.db.nmap.count(hostfilter)) + '\n') else: kargs = {} if args.limit is not None: kargs["limit"] = args.limit if args.skip is not None: kargs["skip"] = args.skip if sortkeys: kargs["sort"] = sortkeys cursor = db.db.nmap.get(hostfilter, **kargs) displayfunction(cursor) sys.exit(0)
def main() -> None: displayfunction: Callable[[DBCursor], None] parser = argparse.ArgumentParser( description="Access and query the active scans database.", # We use db.nmap rather than DBNmap here because we need an instance... parents=[db.nmap.argparser, CLI_ARGPARSER], ) parser.add_argument( "--no-screenshots", action="store_true", help="When used with --json, do not output screenshots data.", ) parser.add_argument("--honeyd", action="store_true", help="Output results as a honeyd config file.") parser.add_argument( "--nmap-xml", action="store_true", help="Output results as a nmap XML output file.", ) parser.add_argument( "--gnmap", action="store_true", help="Output results as a nmap grepable output file.", ) parser.add_argument( "--graphroute", choices=["dot", "rtgraph3d"] if graphroute.HAVE_DBUS else ["dot"], help="Create a graph from traceroute results. " 'dot: output result as Graphviz "dot" format to stdout.' "%s" % (" rtgraph3d: send results to rtgraph3d." if graphroute.HAVE_DBUS else ""), ) parser.add_argument( "--graphroute-cluster", choices=["AS", "Country"], help="Cluster IP according to the specified criteria" "(only for --graphroute dot)", ) if graphroute.HAVE_DBUS: parser.add_argument( "--graphroute-dont-reset", action="store_true", help="Do NOT reset graph (only for --graphroute rtgraph3d)", ) parser.add_argument( "--graphroute-include", choices=["last-hop", "target"], help="How far should graphroute go? Default if to " "exclude the last hop and the target for each result.", ) parser.add_argument( "--top", metavar="FIELD / ~FIELD", help="Output most common (least common: ~) values for " "FIELD, by default 10, use --limit to change that, " "--limit 0 means unlimited.", ) parser.add_argument( "--csv", metavar="TYPE", help="Output result as a CSV file", choices=["ports", "hops"], ) parser.add_argument( "--csv-separator", metavar="SEPARATOR", default=",", help="Select separator for --csv output", ) parser.add_argument( "--csv-add-infos", action="store_true", help="Include country_code and as_number fields to CSV file", ) parser.add_argument( "--csv-na-str", default="NA", help='String to use for "Not Applicable" value (defaults to "NA")', ) args = parser.parse_args() if args.from_db: dbase = DBNmap.from_url(args.from_db) dbase.globaldb = db else: dbase = db.nmap out = sys.stdout hostfilter = dbase.parse_args(args) sortkeys = [] if args.init: if os.isatty(sys.stdin.fileno()): sys.stdout.write( "This will remove any scan result in your database. Process ? [y/N] " ) ans = input() if ans.lower() != "y": sys.exit(-1) dbase.init() sys.exit(0) if args.ensure_indexes: if os.isatty(sys.stdin.fileno()): sys.stdout.write("This will lock your database. Process ? [y/N] ") ans = input() if ans.lower() != "y": sys.exit(-1) dbase.ensure_indexes() sys.exit(0) if args.top is not None: sys.stdout.writelines( dbase.display_top(args.top, hostfilter, args.limit)) sys.exit(0) if args.sort is not None: sortkeys = [(field[1:], -1) if field.startswith("~") else (field, 1) for field in args.sort] if args.short: display_short(dbase, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) if args.distinct is not None: display_distinct(dbase, args.distinct, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) if args.explain: displayfunction_explain(hostfilter, dbase) sys.exit(0) if args.delete: displayfunction_remove(hostfilter, dbase) sys.exit(0) if args.json: def displayfunction(cur: DBCursor) -> None: return displayfunction_json(cur, dbase, args.no_screenshots) elif args.honeyd: displayfunction = displayfunction_honeyd elif args.http_urls: displayfunction = displayfunction_http_urls elif args.nmap_xml: displayfunction = displayfunction_nmapxml elif args.gnmap: displayfunction = displayfunction_gnmap elif args.graphroute is not None: def displayfunction(cur: DBCursor) -> None: if not hasattr(args, "graphroute_dont_reset"): args.graphroute_dont_reset = False return displayfunction_graphroute( cur, args.graphroute, args.graphroute_cluster, args.graphroute_include, args.graphroute_dont_reset, ) elif args.csv is not None: def displayfunction(cur: DBCursor) -> None: return displayfunction_csv(cur, args.csv, args.csv_separator, args.csv_na_str, args.csv_add_infos) elif args.to_db is not None: outdb = DBNmap.from_url(args.to_db) def displayfunction(cur: DBCursor) -> None: outdb.start_store_hosts() for rec in cur: try: del rec["_id"] except KeyError: pass try: outdb.store_host(rec) except Exception: LOGGER.warning("Cannot insert record %r", rec, exc_info=True) outdb.stop_store_hosts() else: def displayfunction(cur: DBCursor) -> None: nmapout.displayhosts(cur, out=out) if args.update_schema: dbase.migrate_schema(args.version) elif args.count: out.write(str(dbase.count(hostfilter)) + "\n") else: kargs = {} if args.limit is not None: kargs["limit"] = args.limit if args.skip is not None: kargs["skip"] = args.skip if sortkeys: kargs["sort"] = sortkeys cursor = dbase.get(hostfilter, **kargs) displayfunction(cursor) sys.exit(0)
def displayfunction(x): return displayfunction_explain(x, db.db.nmap)
def main(): if USING_ARGPARSE: parser = argparse.ArgumentParser( description='Access and query the active scans database.', parents=[db.db.nmap.argparser], ) else: parser = optparse.OptionParser( description='Access and query the active scans database.', ) for args, kargs in db.db.nmap.argparser.args: parser.add_option(*args, **kargs) parser.parse_args_orig = parser.parse_args parser.parse_args = lambda: parser.parse_args_orig()[0] parser.add_argument = parser.add_option parser.add_argument('--init', '--purgedb', action='store_true', help='Purge or create and initialize the database.') parser.add_argument('--ensure-indexes', action='store_true', help='Create missing indexes (will lock the ' 'database).') parser.add_argument('--short', action='store_true', help='Output only IP addresses, one per line.') parser.add_argument('--json', action='store_true', help='Output results as JSON documents.') parser.add_argument('--no-screenshots', action='store_true', help='When used with --json, do not output ' 'screenshots data.') parser.add_argument('--honeyd', action='store_true', help='Output results as a honeyd config file.') parser.add_argument('--nmap-xml', action='store_true', help='Output results as a nmap XML output file.') parser.add_argument( '--graphroute', choices=["dot", "rtgraph3d"] if graphroute.HAVE_DBUS else ["dot"], help='Create a graph from traceroute results. ' 'dot: output result as Graphviz "dot" format to stdout.' '%s' % (" rtgraph3d: send results to rtgraph3d." if graphroute.HAVE_DBUS else "")) parser.add_argument('--graphroute-cluster', choices=['AS', 'Country'], help='Cluster IP according to the specified criteria' '(only for --graphroute dot)') if graphroute.HAVE_DBUS: parser.add_argument('--graphroute-dont-reset', action='store_true', help='Do NOT reset graph (only for ' '--graphroute rtgraph3d)') parser.add_argument('--graphroute-include', choices=['last-hop', 'target'], help='How far should graphroute go? Default if to ' 'exclude the last hop and the target for each result.') parser.add_argument('--count', action='store_true', help='Count matched results.') parser.add_argument('--explain', action='store_true', help='MongoDB specific: .explain() the query.') parser.add_argument('--distinct', metavar='FIELD', help='Output only unique FIELD part of the ' 'results, one per line.') parser.add_argument('--top', metavar='FIELD / ~FIELD', help='Output most common (least common: ~) values for ' 'FIELD, by default 10, use --limit to change that, ' '--limit 0 means unlimited.') parser.add_argument('--delete', action='store_true', help='DELETE the matched results instead of ' 'displaying them.') parser.add_argument('--update-schema', action='store_true', help='update (host) schema. Use with --version to ' 'specify your current version') parser.add_argument('--csv', metavar='TYPE', help='Output result as a CSV file', choices=['ports', 'hops']) parser.add_argument('--csv-separator', metavar='SEPARATOR', default=",", help='Select separator for --csv output') parser.add_argument('--csv-add-infos', action='store_true', help="Include country_code and as_number" "fields to CSV file") parser.add_argument('--csv-na-str', default="NA", help='String to use for "Not Applicable" value ' '(defaults to "NA")') if USING_ARGPARSE: parser.add_argument('--sort', metavar='FIELD / ~FIELD', nargs='+', help='Sort results according to FIELD; use ~FIELD ' 'to reverse sort order.') else: parser.add_argument('--sort', metavar='FIELD / ~FIELD', help='Sort results according to FIELD; use ~FIELD ' 'to reverse sort order.') parser.add_argument('--limit', type=int, help='Ouput at most LIMIT results.') parser.add_argument('--skip', type=int, help='Skip first SKIP results.') args = parser.parse_args() out = sys.stdout hostfilter = db.db.nmap.parse_args(args) sortkeys = [] if args.init: if os.isatty(sys.stdin.fileno()): sys.stdout.write( 'This will remove any scan result in your database. ' 'Process ? [y/N] ') ans = input() if ans.lower() != 'y': sys.exit(-1) db.db.nmap.init() sys.exit(0) if args.ensure_indexes: if os.isatty(sys.stdin.fileno()): sys.stdout.write('This will lock your database. ' 'Process ? [y/N] ') ans = input() if ans.lower() != 'y': sys.exit(-1) db.db.nmap.ensure_indexes() sys.exit(0) if args.top is not None: display_top(db.db.nmap, args.top, hostfilter, args.limit) sys.exit(0) if args.sort is not None: sortkeys = [(field[1:], -1) if field.startswith('~') else (field, 1) for field in args.sort] if args.short: display_short(db.db.nmap, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) elif args.distinct is not None: display_distinct(db.db.nmap, args.distinct, hostfilter, sortkeys, args.limit, args.skip) sys.exit(0) if args.json: displayfunction = lambda x: displayfunction_json( x, db.db.nmap, args.no_screenshots) elif args.honeyd: displayfunction = displayfunction_honeyd elif args.nmap_xml: displayfunction = displayfunction_nmapxml elif args.graphroute is not None: displayfunction = lambda x: displayfunction_graphroute( x, args.graphroute, args.graphroute_include, args. graphroute_dont_reset) elif args.explain: displayfunction = lambda x: displayfunction_explain(x, db.db.nmap) elif args.delete: displayfunction = lambda x: displayfunction_remove(x, db.db.nmap) elif args.csv is not None: displayfunction = lambda x: displayfunction_csv( x, args.csv, args.csv_separator, args.csv_na_str, args. csv_add_infos) else: def displayfunction(cursor): nmapout.displayhosts(cursor, out=out) if args.update_schema: db.db.nmap.migrate_schema(args.version) elif args.count: out.write(str(db.db.nmap.count(hostfilter)) + '\n') else: kargs = {} if args.limit is not None: kargs["limit"] = args.limit if args.skip is not None: kargs["skip"] = args.skip if sortkeys: kargs["sort"] = sortkeys cursor = db.db.nmap.get(hostfilter, **kargs) displayfunction(cursor) sys.exit(0)