summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-03-21 16:03:47 +0200
committerimarom <imarom@cisco.com>2016-03-21 16:03:47 +0200
commitb89efa188810bf95a9d245e69e2961b5721c3b0f (patch)
tree454273ac6c4ae972ebb8a2c86b893296970b4fa9 /scripts/external_libs/scapy-python3-0.18/scapy/base_classes.py
parentf72c6df9d2e9998ae1f3529d729ab7930b35785a (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.py237
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
-
-
-