diff options
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/asn1/mib.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/asn1/mib.py | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/asn1/mib.py b/scripts/external_libs/scapy-python3-0.18/scapy/asn1/mib.py deleted file mode 100644 index 8f3df25c..00000000 --- a/scripts/external_libs/scapy-python3-0.18/scapy/asn1/mib.py +++ /dev/null @@ -1,149 +0,0 @@ -## This file is part of Scapy -## See http://www.secdev.org/projects/scapy for more informations -## Copyright (C) Philippe Biondi <phil@secdev.org> -## This program is published under a GPLv2 license - -""" -Management Information Base (MIB) parsing -""" - -import re -from glob import glob -from scapy.dadict import DADict,fixname -from scapy.config import conf -from scapy.utils import do_graph - -################# -## MIB parsing ## -################# - -_mib_re_integer = re.compile(b"^[0-9]+$") -_mib_re_both = re.compile(b"^([a-zA-Z_][a-zA-Z0-9_-]*)\(([0-9]+)\)$") -_mib_re_oiddecl = re.compile(b"$\s*([a-zA-Z0-9_-]+)\s+OBJECT([^:\{\}]|\{[^:]+\})+::=\s*\{([^\}]+)\}",re.M) -_mib_re_strings = re.compile(b'"[^"]*"') -_mib_re_comments = re.compile(b'--.*(\r|\n)') - -class MIBDict(DADict): - def _findroot(self, x): - if x.startswith(b"."): - x = x[1:] - if not x.endswith(b"."): - x += b"." - max=0 - root=b"." - for k in self.keys(): - if x.startswith(self[k]+b"."): - if max < len(self[k]): - max = len(self[k]) - root = k - return root, x[max:-1] - def _oidname(self, x): - root,remainder = self._findroot(x) - return root+remainder - def _oid(self, x): - if type(x) is str: - x = x.encode('ascii') - xl = x.strip(b".").split(b".") - p = len(xl)-1 - while p >= 0 and _mib_re_integer.match(xl[p]): - p -= 1 - if p != 0 or xl[p] not in self: - return x - xl[p] = self[xl[p]] - return b".".join(xl[p:]) - def _make_graph(self, other_keys=[], **kargs): - nodes = [(k,self[k]) for k in self.keys()] - oids = [self[k] for k in self.keys()] - for k in other_keys: - if k not in oids: - nodes.append(self.oidname(k),k) - s = 'digraph "mib" {\n\trankdir=LR;\n\n' - for k,o in nodes: - s += '\t"%s" [ label="%s" ];\n' % (o,k) - s += "\n" - for k,o in nodes: - parent,remainder = self._findroot(o[:-1]) - remainder = remainder[1:]+o[-1] - if parent != ".": - parent = self[parent] - s += '\t"%s" -> "%s" [label="%s"];\n' % (parent, o,remainder) - s += "}\n" - do_graph(s, **kargs) - def __len__(self): - return len(self.keys()) - - -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 - - -def load_mib(filenames): - the_mib = {'iso': ['1']} - unresolved = {} - for k in conf.mib.keys(): - 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 in range(len(oid)): - m = _mib_re_both.match(oid[i]) - if m: - oid[i] = m.groups()[1] - mib_register(ident, oid, the_mib, unresolved) - - newmib = MIBDict(_name="MIB") - for k,o in the_mib.items(): - newmib[k]=".".join(o) - for k,o in unresolved.items(): - newmib[k]=".".join(o) - - conf.mib=newmib - - - -conf.mib = MIBDict(_name="MIB") |