Example #1
0
def load_mib(filenames):
    """Load the conf.mib dict from a list of filenames"""
    the_mib = {'iso': ['1']}
    unresolved = {}
    for k in six.iterkeys(conf.mib):
        _mib_register(conf.mib[k], k.split("."), the_mib, unresolved)

    if isinstance(filenames, (str, bytes)):
        filenames = [filenames]
    for fnames in filenames:
        for fname in glob(fnames):
            f = open(fname)
            text = f.read()
            cleantext = " ".join(
                _mib_re_strings.split(" ".join(
                    _mib_re_comments.split(text))))  # noqa: E501
            for m in _mib_re_oiddecl.finditer(cleantext):
                gr = m.groups()
                ident, oid = gr[0], gr[-1]
                ident = fixname(ident)
                oid = oid.split()
                for i, elt in enumerate(oid):
                    m = _mib_re_both.match(elt)
                    if m:
                        oid[i] = m.groups()[1]
                _mib_register(ident, oid, the_mib, unresolved)

    newmib = MIBDict(_name="MIB")
    for oid, key in six.iteritems(the_mib):
        newmib[".".join(key)] = oid
    for oid, key in six.iteritems(unresolved):
        newmib[".".join(key)] = oid

    conf.mib = newmib
Example #2
0
def load_mib(filenames):
    the_mib = {'iso': ['1']}
    unresolved = {}
    for k in conf.mib.iterkeys():
        mib_register(k, conf.mib[k].split("."), the_mib, unresolved)

    if type(filenames) is str:
        filenames = [filenames]
    for fnames in filenames:
        for fname in glob(fnames):
            f = open(fname)
            text = f.read()
            cleantext = " ".join(
                _mib_re_strings.split(" ".join(_mib_re_comments.split(text))))
            for m in _mib_re_oiddecl.finditer(cleantext):
                gr = m.groups()
                ident, oid = gr[0], gr[-1]
                ident = fixname(ident)
                oid = oid.split()
                for i, elt in enumerate(oid):
                    m = _mib_re_both.match(elt)
                    if m:
                        oid[i] = m.groups()[1]
                mib_register(ident, oid, the_mib, unresolved)

    newmib = MIBDict(_name="MIB")
    for k, o in the_mib.iteritems():
        newmib[k] = ".".join(o)
    for k, o in unresolved.iteritems():
        newmib[k] = ".".join(o)

    conf.mib = newmib
Example #3
0
def load_mib(filenames):
    the_mib = {'iso': ['1']}
    unresolved = {}
    for k in conf.mib.iterkeys():
        mib_register(k, conf.mib[k].split("."), the_mib, unresolved)

    if type(filenames) is str:
        filenames = [filenames]
    for fnames in filenames:
        for fname in glob(fnames):
            f = open(fname)
            text = f.read()
            cleantext = " ".join(_mib_re_strings.split(" ".join(_mib_re_comments.split(text))))
            for m in _mib_re_oiddecl.finditer(cleantext):
                gr = m.groups()
                ident,oid = gr[0],gr[-1]
                ident=fixname(ident)
                oid = oid.split()
                for i, elt in enumerate(oid):
                    m = _mib_re_both.match(elt)
                    if m:
                        oid[i] = m.groups()[1]
                mib_register(ident, oid, the_mib, unresolved)

    newmib = MIBDict(_name="MIB")
    for k,o in the_mib.iteritems():
        newmib[k]=".".join(o)
    for k,o in unresolved.iteritems():
        newmib[k]=".".join(o)

    conf.mib=newmib
Example #4
0
File: mib.py Project: commial/scapy
def load_mib(filenames):
    """Load the conf.mib dict from a list of filenames"""
    the_mib = {'iso': ['1']}
    unresolved = {}
    for k in six.iterkeys(conf.mib):
        _mib_register(conf.mib[k], k.split("."), the_mib, unresolved)

    if isinstance(filenames, (str, bytes)):
        filenames = [filenames]
    for fnames in filenames:
        for fname in glob(fnames):
            f = open(fname)
            text = f.read()
            cleantext = " ".join(_mib_re_strings.split(" ".join(_mib_re_comments.split(text))))  # noqa: E501
            for m in _mib_re_oiddecl.finditer(cleantext):
                gr = m.groups()
                ident, oid = gr[0], gr[-1]
                ident = fixname(ident)
                oid = oid.split()
                for i, elt in enumerate(oid):
                    m = _mib_re_both.match(elt)
                    if m:
                        oid[i] = m.groups()[1]
                _mib_register(ident, oid, the_mib, unresolved)

    newmib = MIBDict(_name="MIB")
    for oid, key in six.iteritems(the_mib):
        newmib[".".join(key)] = oid
    for oid, key in six.iteritems(unresolved):
        newmib[".".join(key)] = oid

    conf.mib = newmib
Example #5
0
File: mib.py Project: phretor/scapy
def _mib_register(
        ident,  # type: str
        value,  # type: List[str]
        the_mib,  # type: Dict[str, List[str]]
        unresolved,  # type: Dict[str, List[str]]
        alias,  # type: Dict[str, str]
):
    # type: (...) -> bool
    """
    Internal function used to register an OID and its name in a MIBDict
    """
    if ident in the_mib:
        # We have already resolved this one. Store the alias
        alias[".".join(value)] = ident
        return True
    if ident in unresolved:
        # We know we can't resolve this one
        return False
    resval = []
    not_resolved = 0
    # Resolve the OID
    # (e.g. 2.basicConstraints.3 -> 2.2.5.29.19.3)
    for v in value:
        if _mib_re_integer.match(v):
            resval.append(v)
        else:
            v = fixname(plain_str(v))
            if v not in the_mib:
                not_resolved = 1
            if v in the_mib:
                resval += the_mib[v]
            elif v in unresolved:
                resval += unresolved[v]
            else:
                resval.append(v)
    if not_resolved:
        # Unresolved
        unresolved[ident] = resval
        return False
    else:
        # Fully resolved
        the_mib[ident] = resval
        keys = list(unresolved)
        i = 0
        # Go through the unresolved to update the ones that
        # depended on the one we just did
        while i < len(keys):
            k = keys[i]
            if _mib_register(k, unresolved[k], the_mib, {}, alias):
                # Now resolved: we can remove it from unresolved
                del (unresolved[k])
                del (keys[i])
                i = 0
            else:
                i += 1

        return True
Example #6
0
def load_mib(filenames):
    # type: (str) -> None
    """
    Load the conf.mib dict from a list of filenames
    """
    the_mib = {'iso': ['1']}
    unresolved = {}  # type: Dict[str, List[str]]
    alias = {}  # type: Dict[str, str]
    # Export the current MIB to a working dictionary
    for k in six.iterkeys(conf.mib):
        _mib_register(conf.mib[k], k.split("."), the_mib, unresolved, alias)

    # Read the files
    if isinstance(filenames, (str, bytes)):
        files_list = [filenames]
    else:
        files_list = filenames
    for fnames in files_list:
        for fname in glob(fnames):
            with open(fname) as f:
                text = f.read()
            cleantext = " ".join(
                _mib_re_strings.split(" ".join(_mib_re_comments.split(text)))
            )
            for m in _mib_re_oiddecl.finditer(cleantext):
                gr = m.groups()
                ident, oid_s = gr[0], gr[-1]
                ident = fixname(ident)
                oid_l = oid_s.split()
                for i, elt in enumerate(oid_l):
                    m2 = _mib_re_both.match(elt)
                    if m2:
                        oid_l[i] = m2.groups()[1]
                _mib_register(ident, oid_l, the_mib, unresolved, alias)

    # Create the new MIB
    newmib = MIBDict(_name="MIB")
    # Add resolved values
    for oid, key in six.iteritems(the_mib):
        newmib[".".join(key)] = oid
    # Add unresolved values
    for oid, key in six.iteritems(unresolved):
        newmib[".".join(key)] = oid
    # Add aliases
    for key, oid in six.iteritems(alias):
        newmib[key] = oid

    conf.mib = newmib
Example #7
0
def load_services(filename):
    # type: (str) -> Tuple[DADict[int, str], DADict[int, str]]
    spaces = re.compile(b"[ \t]+|\n")
    tdct = DADict(_name="%s-tcp" % filename)  # type: DADict[int, str]
    udct = DADict(_name="%s-udp" % filename)  # type: DADict[int, str]
    try:
        with open(filename, "rb") as fdesc:
            for line in fdesc:
                try:
                    shrp = line.find(b"#")
                    if shrp >= 0:
                        line = line[:shrp]
                    line = line.strip()
                    if not line:
                        continue
                    lt = tuple(re.split(spaces, line))
                    if len(lt) < 2 or not lt[0]:
                        continue
                    dtct = None
                    if lt[1].endswith(b"/tcp"):
                        dtct = tdct
                    elif lt[1].endswith(b"/udp"):
                        dtct = udct
                    else:
                        continue
                    port = lt[1].split(b'/')[0]
                    name = fixname(lt[0])
                    if b"-" in port:
                        sport, eport = port.split(b"-")
                        for i in range(int(sport), int(eport) + 1):
                            dtct[i] = name
                    else:
                        dtct[int(port)] = name
                except Exception as e:
                    log_loading.warning(
                        "Couldn't parse file [%s]: line [%r] (%s)",
                        filename,
                        line,
                        e,
                    )
    except IOError:
        log_loading.info("Can't open /etc/services file")
    return tdct, udct
Example #8
0
 def _process_data(fdesc):
     for line in fdesc:
         try:
             shrp = line.find(b"#")
             if shrp >= 0:
                 line = line[:shrp]
             line = line.strip()
             if not line:
                 continue
             lt = tuple(re.split(spaces, line))
             if len(lt) < 2 or not lt[0]:
                 continue
             dct[int(lt[1], _integer_base)] = fixname(lt[0])
         except Exception as e:
             log_loading.info(
                 "Couldn't parse file [%s]: line [%r] (%s)",
                 filename,
                 line,
                 e,
             )
Example #9
0
def _mib_register(ident, value, the_mib, unresolved):
    """Internal function used to register an OID and its name in a MIBDict"""
    if ident in the_mib or ident in unresolved:
        return ident in the_mib
    resval = []
    not_resolved = 0
    for v in value:
        if _mib_re_integer.match(v):
            resval.append(v)
        else:
            v = fixname(plain_str(v))
            if v not in the_mib:
                not_resolved = 1
            if v in the_mib:
                v = the_mib[v]
            elif v in unresolved:
                v = unresolved[v]
            if isinstance(v, list):
                resval += v
            else:
                resval.append(v)
    if not_resolved:
        unresolved[ident] = resval
        return False
    else:
        the_mib[ident] = resval
        keys = list(unresolved)
        i = 0
        while i < len(keys):
            k = keys[i]
            if _mib_register(k, unresolved[k], the_mib, {}):
                del (unresolved[k])
                del (keys[i])
                i = 0
            else:
                i += 1

        return True
Example #10
0
File: mib.py Project: commial/scapy
def _mib_register(ident, value, the_mib, unresolved):
    """Internal function used to register an OID and its name in a MIBDict"""
    if ident in the_mib or ident in unresolved:
        return ident in the_mib
    resval = []
    not_resolved = 0
    for v in value:
        if _mib_re_integer.match(v):
            resval.append(v)
        else:
            v = fixname(plain_str(v))
            if v not in the_mib:
                not_resolved = 1
            if v in the_mib:
                v = the_mib[v]
            elif v in unresolved:
                v = unresolved[v]
            if isinstance(v, list):
                resval += v
            else:
                resval.append(v)
    if not_resolved:
        unresolved[ident] = resval
        return False
    else:
        the_mib[ident] = resval
        keys = list(unresolved)
        i = 0
        while i < len(keys):
            k = keys[i]
            if _mib_register(k, unresolved[k], the_mib, {}):
                del(unresolved[k])
                del(keys[i])
                i = 0
            else:
                i += 1

        return True
Example #11
0
def mib_register(ident, value, the_mib, unresolved):
    if ident in the_mib or ident in unresolved:
        return ident in the_mib
    resval = []
    not_resolved = 0
    for v in value:
        if _mib_re_integer.match(v):
            resval.append(v)
        else:
            v = fixname(v)
            if v not in the_mib:
                not_resolved = 1
            if v in the_mib:
                v = the_mib[v]
            elif v in unresolved:
                v = unresolved[v]
            if type(v) is list:
                resval += v
            else:
                resval.append(v)
    if not_resolved:
        unresolved[ident] = resval
        return False
    else:
        the_mib[ident] = resval
        keys = unresolved.keys()
        i = 0
        while i < len(keys):
            k = keys[i]
            if mib_register(k, unresolved[k], the_mib, {}):
                del (unresolved[k])
                del (keys[i])
                i = 0
            else:
                i += 1

        return True
Example #12
0
def mib_register(ident, value, the_mib, unresolved):
    if ident in the_mib or ident in unresolved:
        return ident in the_mib
    resval = []
    not_resolved = 0
    for v in value:
        if _mib_re_integer.match(v):
            resval.append(v)
        else:
            v = fixname(v)
            if v not in the_mib:
                not_resolved = 1
            if v in the_mib:
                v = the_mib[v]
            elif v in unresolved:
                v = unresolved[v]
            if type(v) is list:
                resval += v
            else:
                resval.append(v)
    if not_resolved:
        unresolved[ident] = resval
        return False
    else:
        the_mib[ident] = resval
        keys = unresolved.keys()
        i = 0
        while i < len(keys):
            k = keys[i]
            if mib_register(k,unresolved[k], the_mib, {}):
                del(unresolved[k])
                del(keys[i])
                i = 0
            else:
                i += 1
                    
        return True
Example #13
0
 def ident(self, v):
     return fixname(v[0] if isinstance(v, tuple) else v)
Example #14
0
 def ident(self, v):
     # type: (Any) -> str
     return fixname(v[0] if isinstance(v, tuple) else v)