diff options
author | 2016-03-21 16:03:47 +0200 | |
---|---|---|
committer | 2016-03-21 16:03:47 +0200 | |
commit | b89efa188810bf95a9d245e69e2961b5721c3b0f (patch) | |
tree | 454273ac6c4ae972ebb8a2c86b893296970b4fa9 /scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py | |
parent | f72c6df9d2e9998ae1f3529d729ab7930b35785a (diff) |
scapy python 2/3
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py b/scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py deleted file mode 100644 index bace90d6..00000000 --- a/scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py +++ /dev/null @@ -1,237 +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 - -""" -Generators and packet meta classes. -""" - -############### -## Generators ## -################ - -import re,random,socket -from types import GeneratorType -import scapy.config -from . import error - -class Gen(object): - def __iter__(self): - return iter([]) - -class SetGen(Gen): - def __init__(self, col, _iterpacket=1): - self._iterpacket=_iterpacket - if type(col) is list or isinstance(col, GeneratorType): - self.col = col - elif isinstance(col, BasePacketList): - self.col = list(col) - else: - self.col = [col] - # DEPRECATED - # def transf(self, element): - # return element - def __iter__(self): - for i in self.col: - if (type(i) is tuple) and (len(i) == 2) and type(i[0]) is int and type(i[1]) is int: - if (i[0] <= i[1]): - j=i[0] - while j <= i[1]: - yield j - j += 1 - elif isinstance(i, Gen) and (self._iterpacket or not isinstance(i,BasePacket)): - for j in i: - yield j - else: - yield i - def __repr__(self): - return "<SetGen %s>" % self.col.__repr__() - -class Net(Gen): - """Generate a list of IPs from a network address or a name""" - name = "ip" - ipaddress = re.compile(r"^(\*|[0-2]?[0-9]?[0-9](-[0-2]?[0-9]?[0-9])?)\.(\*|[0-2]?[0-9]?[0-9](-[0-2]?[0-9]?[0-9])?)\.(\*|[0-2]?[0-9]?[0-9](-[0-2]?[0-9]?[0-9])?)\.(\*|[0-2]?[0-9]?[0-9](-[0-2]?[0-9]?[0-9])?)(/[0-3]?[0-9])?$") - - @staticmethod - def _parse_digit(a,netmask): - netmask = min(8,max(netmask,0)) - if a == "*": - a = (0,256) - elif a.find("-") >= 0: - x,y = map(int,a.split("-")) - if x > y: - y = x - a = (x & (0xff<<netmask) , max(y, (x | (0xff>>(8-netmask))))+1) - else: - a = (int(a) & (0xff<<netmask),(int(a) | (0xff>>(8-netmask)))+1) - return a - - @classmethod - def _parse_net(cls, net): - tmp=net.split('/')+["32"] - if not cls.ipaddress.match(net): - tmp[0]=socket.gethostbyname(tmp[0]) - netmask = int(tmp[1]) - #return map(lambda x,y: cls._parse_digit(x,y), tmp[0].split("."), map(lambda x,nm=netmask: x-nm, (8,16,24,32))),netmask - return list(map(lambda x,y: cls._parse_digit(x,y), tmp[0].split("."), [ i - netmask for i in (8,16,24,32)] )),netmask - - def __init__(self, net): - self.repr=net - self.parsed,self.netmask = self._parse_net(net) - - def __iter__(self): - for d in range(*self.parsed[3]): - for c in range(*self.parsed[2]): - for b in range(*self.parsed[1]): - for a in range(*self.parsed[0]): - yield "%i.%i.%i.%i" % (a,b,c,d) - def choice(self): - ip = [] - for v in self.parsed: - ip.append(str(random.randint(v[0],v[1]-1))) - return ".".join(ip) - - def __repr__(self): - return "Net(%r)" % self.repr - def __eq__(self, other): - if hasattr(other, "parsed"): - p2 = other.parsed - else: - p2,nm2 = self._parse_net(other) - return self.parsed == p2 - def __contains__(self, other): - if hasattr(other, "parsed"): - p2 = other.parsed - else: - p2,nm2 = self._parse_net(other) - for (a1,b1),(a2,b2) in zip(self.parsed,p2): - if a1 > a2 or b1 < b2: - return False - return True - def __rcontains__(self, other): - return self in self.__class__(other) - - -class OID(Gen): - name = "OID" - def __init__(self, oid): - self.oid = oid - self.cmpt = [] - fmt = [] - for i in oid.split("."): - if "-" in i: - fmt.append("%i") - self.cmpt.append(tuple(map(int, i.split("-")))) - else: - fmt.append(i) - self.fmt = ".".join(fmt) - def __repr__(self): - return "OID(%r)" % self.oid - def __iter__(self): - ii = [k[0] for k in self.cmpt] - while 1: - yield self.fmt % tuple(ii) - i = 0 - while 1: - if i >= len(ii): - raise StopIteration - if ii[i] < self.cmpt[i][1]: - ii[i]+=1 - break - else: - ii[i] = self.cmpt[i][0] - i += 1 - - - -###################################### -## Packet abstract and base classes ## -###################################### - -class Packet_metaclass(type): - def __new__(cls, name, bases, dct): - if "fields_desc" in dct: # perform resolution of references to other packets - current_fld = dct["fields_desc"] - resolved_fld = [] - for f in current_fld: - if isinstance(f, Packet_metaclass): # reference to another fields_desc - for f2 in f.fields_desc: - resolved_fld.append(f2) - else: - resolved_fld.append(f) - else: # look for a field_desc in parent classes - resolved_fld = None - for b in bases: - if hasattr(b,"fields_desc"): - resolved_fld = b.fields_desc - break - - if resolved_fld: # perform default value replacements - final_fld = [] - for f in resolved_fld: - if f.name in dct: - f = f.copy() - f.default = dct[f.name] - del(dct[f.name]) - final_fld.append(f) - - dct["fields_desc"] = final_fld - - newcls = super(Packet_metaclass, cls).__new__(cls, name, bases, dct) - if hasattr(newcls,"register_variant"): - newcls.register_variant() - for f in newcls.fields_desc: - f.register_owner(newcls) - scapy.config.conf.layers.register(newcls) - return newcls - - def __getattr__(self, attr): - for k in self.fields_desc: - if k.name == attr: - return k - raise AttributeError(attr) - - def __call__(cls, *args, **kargs): - if "dispatch_hook" in cls.__dict__: - cls = cls.dispatch_hook(*args, **kargs) - i = cls.__new__(cls, cls.__name__, cls.__bases__, cls.__dict__) - i.__init__(*args, **kargs) - return i - - -class NewDefaultValues(Packet_metaclass): - """NewDefaultValues is deprecated (not needed anymore) - - remove this: - __metaclass__ = NewDefaultValues - and it should still work. - """ - def __new__(cls, name, bases, dct): - from error import log_loading - import traceback - try: - for tb in traceback.extract_stack()+[("??",-1,None,"")]: - f,l,_,line = tb - if line.startswith("class"): - break - except: - f,l="??",-1 - raise - log_loading.warning("Deprecated (no more needed) use of NewDefaultValues (%s l. %i)." % (f,l)) - - return super(NewDefaultValues, cls).__new__(cls, name, bases, dct) - -class BasePacket(Gen): - pass - - -############################# -## Packet list base classe ## -############################# - -class BasePacketList: - pass - - - |