Exemplo n.º 1
0
 def displayfunction(x):
     return displayfunction_json(x, db.view, args.no_screenshot)
Exemplo n.º 2
0
 def displayfunction(cur: DBCursor) -> None:
     return displayfunction_json(cur, db.view, args.no_screenshots)
Exemplo n.º 3
0
 def displayfunction(x):
     return displayfunction_json(
         x, db.view, args.no_screenshots
     )
Exemplo n.º 4
0
 def displayfunction(x):
     return displayfunction_json(x, db.db.nmap, args.no_screenshots)
Exemplo n.º 5
0
 def output(host):
     return displayfunction_json([host], db.view)
Exemplo n.º 6
0
 def output(host: Record) -> None:
     return displayfunction_json([host], db.view)
Exemplo n.º 7
0
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)