diff --git a/scapy/layers/dhcp.py b/scapy/layers/dhcp.py index fdb4d717938a6ebb47359896a165b07179704786..8527112c5b3db68732da088498378344c4f03fd0 100644 --- a/scapy/layers/dhcp.py +++ b/scapy/layers/dhcp.py @@ -10,6 +10,7 @@ from scapy.fields import * from scapy.ansmachine import * from scapy.layers.inet import UDP from scapy.base_classes import Net +from scapy.volatile import RandField dhcpmagic="c\x82Sc" @@ -145,6 +146,27 @@ del(k) +class RandDHCPOptions(RandField): + def __init__(self, size=None, rndstr=None): + if size is None: + size = RandNumExpo(0.05) + self.size = size + if rndstr is None: + rndstr = RandBin(RandNum(0,255)) + self.rndstr=rndstr + self._opts = DHCPOptions.values() + self._opts.remove("pad") + self._opts.remove("end") + def _fix(self): + op = [] + for k in range(self.size): + o = random.choice(self._opts) + if type(o) is str: + op.append((o,self.rndstr*1)) + else: + op.append((o.name, o.randval()._fix())) + return op + class DHCPOptionsField(StrField): islist=1 diff --git a/scapy/volatile.py b/scapy/volatile.py index ccfd4536a9a5d53e4c8962acc4d0e3d7267f7623..b6f7181a1e5d3167286b0b3d1e7955440bd5a772 100644 --- a/scapy/volatile.py +++ b/scapy/volatile.py @@ -205,28 +205,6 @@ class RandOID(RandString): oid.append(i) return ".".join(oid) - - -class RandDHCPOptions(RandField): - def __init__(self, size=None, rndstr=None): - if size is None: - size = RandNumExpo(0.05) - self.size = size - if rndstr is None: - rndstr = RandBin(RandNum(0,255)) - self.rndstr=rndstr - self._opts = DHCPOptions.values() - self._opts.remove("pad") - self._opts.remove("end") - def _fix(self): - op = [] - for k in range(self.size): - o = random.choice(self._opts) - if type(o) is str: - op.append((o,self.rndstr*1)) - else: - op.append((o.name, o.randval()._fix())) - return op # Automatic timestamp