Beispiel #1
0
def interrogate(args):
    db = get_db(args)
    hostname = args.hostname[0]
    authinfo = db.authinfo.find_one({"name": hostname})
    if authinfo is None:
        authinfo = {"name": hostname}
    default = db.authinfo.find_one({"name": "default"})
    if default is None:
        authinfo = {}

    descriptions = {}
    if args.snmp:
        for community in authinfo.get("community", []) + default.get("community", []):
            log.info("querying with SNMP community: %s" % community)
            try:
                from snmp import interrogate_snmp
                descriptions["snmp"] = interrogate_snmp(hostname, community=community)
                authinfo["community"] = [community]
                break
            except:
                pass

    if args.login:
        for u,p in authinfo.get("login", []) + default.get("login", []):
            log.info("logging in as user: %s" % u)
            try:
                from rlogin import interrogate_rlogin
                descriptions["login"] = interrogate_rlogin(host=hostname,
                                                           username=u, password=p)
                authinfo["login"] = [(u,p)]
                break
            except:
                pass

    db.authinfo.save(authinfo)

    try:
        ident = pkey_check(descriptions)
    except PKeyError, e:
        log.warning("%s\n%s" % (e, format_exc(e)))
        return
Beispiel #2
0
    from interrogate import interrogate
    from pprint import pprint
    from storage import pkey_check, mergedict

    logging.basicConfig(level=logging.INFO)

    #    from rlogin import Rcmd, MetaHost
    #    c = Rcmd(host=argv[1], username=argv[3], password=argv[4])
    #    h = MetaHost(c)
    #    pprint(h.router_info())
    #    c.logout()
    #    exit(0)

    descr = interrogate(argv[1], community=argv[2], username=argv[3], password=argv[4])
    #    pprint(descr)
    ident = pkey_check(descr)
    print "identifier:", ident

    import redis
    import json

    r = redis.Redis()
    for k, v in descr.items():
        r.hset(k, ident, json.dumps(v))
    merged = mergedict(list(descr.values()))

    r.hset("hosts", ident, merged)
    for addr in [x.get("mac") for x in merged["interfaces"]]:
        if addr is None:
            continue
        r.hset("macaddrs", addr, ident)