diff --git a/scapy/fields.py b/scapy/fields.py index 2b2896686470e743d0076789a3d350e5141dd918..59d26c7db5a46757922dce3fc4b0ff79901a95e7 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -181,39 +181,6 @@ class MACField(Field): return RandMAC() -class Dot11AddrMACField(MACField): - def is_applicable(self, pkt): - return 1 - def addfield(self, pkt, s, val): - if self.is_applicable(pkt): - return MACField.addfield(self, pkt, s, val) - else: - return s - def getfield(self, pkt, s): - if self.is_applicable(pkt): - return MACField.getfield(self, pkt, s) - else: - return s,None - -class Dot11Addr2MACField(Dot11AddrMACField): - def is_applicable(self, pkt): - if pkt.type == 1: - return pkt.subtype in [ 0xb, 0xa, 0xe, 0xf] # RTS, PS-Poll, CF-End, CF-End+CF-Ack - return 1 - -class Dot11Addr3MACField(Dot11AddrMACField): - def is_applicable(self, pkt): - if pkt.type in [0,2]: - return 1 - return 0 - -class Dot11Addr4MACField(Dot11AddrMACField): - def is_applicable(self, pkt): - if pkt.type == 2: - if pkt.FCfield & 0x3 == 0x3: # To-DS and From-DS are set - return 1 - return 0 - class IPField(Field): def __init__(self, name, default): Field.__init__(self, name, default, "4s") diff --git a/scapy/layers/dot11.py b/scapy/layers/dot11.py index 0159eac0762b9179c0422307faa516793f268347..15d536657f56b808c47b1f966c0c7926c8abcdd7 100644 --- a/scapy/layers/dot11.py +++ b/scapy/layers/dot11.py @@ -5,6 +5,45 @@ from scapy.fields import * from scapy.plist import PacketList from scapy.layers.l2 import * +### Fields + +class Dot11AddrMACField(MACField): + def is_applicable(self, pkt): + return 1 + def addfield(self, pkt, s, val): + if self.is_applicable(pkt): + return MACField.addfield(self, pkt, s, val) + else: + return s + def getfield(self, pkt, s): + if self.is_applicable(pkt): + return MACField.getfield(self, pkt, s) + else: + return s,None + +class Dot11Addr2MACField(Dot11AddrMACField): + def is_applicable(self, pkt): + if pkt.type == 1: + return pkt.subtype in [ 0xb, 0xa, 0xe, 0xf] # RTS, PS-Poll, CF-End, CF-End+CF-Ack + return 1 + +class Dot11Addr3MACField(Dot11AddrMACField): + def is_applicable(self, pkt): + if pkt.type in [0,2]: + return 1 + return 0 + +class Dot11Addr4MACField(Dot11AddrMACField): + def is_applicable(self, pkt): + if pkt.type == 2: + if pkt.FCfield & 0x3 == 0x3: # To-DS and From-DS are set + return 1 + return 0 + + +### Layers + + class PrismHeader(Packet): """ iwpriv wlan0 monitor 3 """ name = "Prism header"