- redesign summary() method

- fixed Dot11 addresses fields
This commit is contained in:
biondi 2003-10-16 08:41:42 +00:00
parent 5f59b63575
commit d75e586c54
1 changed files with 24 additions and 26 deletions

View File

@ -22,6 +22,10 @@
# #
# $Log: scapy.py,v $ # $Log: scapy.py,v $
# Revision 0.9.15.3 2003/10/16 10:41:42 biondi
# - redesign summary() method
# - fixed Dot11 addresses fields
#
# Revision 0.9.15.2 2003/10/15 14:41:09 biondi # Revision 0.9.15.2 2003/10/15 14:41:09 biondi
# - caching format size (calcsize()) in Field main class # - caching format size (calcsize()) in Field main class
# - allow first packet desassembly to fail in SuperSockets, falling back to Raw # - allow first packet desassembly to fail in SuperSockets, falling back to Raw
@ -292,7 +296,7 @@
from __future__ import generators from __future__ import generators
RCSID="$Id: scapy.py,v 0.9.15.2 2003/10/15 14:41:09 biondi Exp $" RCSID="$Id: scapy.py,v 0.9.15.3 2003/10/16 10:41:42 biondi Exp $"
VERSION = RCSID.split()[2]+"beta" VERSION = RCSID.split()[2]+"beta"
@ -1049,35 +1053,24 @@ class Dot11AddrMACField(MACField):
else: else:
return s,None return s,None
class Dot11Addr2MACField(MACField): class Dot11Addr2MACField(Dot11AddrMACField):
def is_applicable(self, pkt): def is_applicable(self, pkt):
if pkt.type == 1: if pkt.type == 1:
return pkt.subtype in [ 0xb, 0xa, 0xe, 0xf] # RTS, PS-Poll, CF-End, CF-End+CF-Ack return pkt.subtype in [ 0xb, 0xa, 0xe, 0xf] # RTS, PS-Poll, CF-End, CF-End+CF-Ack
return 0 return 1
class Dot11Addr3MACField(MACField): class Dot11Addr3MACField(Dot11AddrMACField):
def is_applicable(self, pkt): def is_applicable(self, pkt):
if pkt.type in [0,2]: if pkt.type in [0,2]:
return 1 return 1
return 0 return 0
class Dot11Addr4MACField(MACField): class Dot11Addr4MACField(Dot11AddrMACField):
def is_applicable(self, pkt): def is_applicable(self, pkt):
if pkt.type == 2: if pkt.type == 2:
if pkt.FCfield & 0x3 == 0x3: # To-DS and From-DS are set if pkt.FCfield & 0x3 == 0x3: # To-DS and From-DS are set
return 1 return 1
return 0 return 0
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 IPField(Field): class IPField(Field):
def __init__(self, name, default): def __init__(self, name, default):
@ -1928,19 +1921,24 @@ Ex : p.sprintf("%.time% %-15s,IP.src% -> %-15s,IP.dst% %IP.chksum% "
s += fmt s += fmt
return s return s
def sum(self):
return self.name
def mysummary(self): def mysummary(self):
return ""
def summaryback(self, smallname=0):
ret = "" ret = ""
if self.underlayer is not None: if not smallname:
ret += self.underlayer.mysummary()
ret += " / "
return ret+self.sum()
def summary(self):
ret = self.payload.summary()
if ret == "":
ret = self.mysummary() ret = self.mysummary()
if ret:
smallname = 1
else:
ret = self.__class__.__name__
if self.underlayer is not None:
ret = "%s / %s" % (self.underlayer.summaryback(smallname),ret)
return ret return ret
def summary(self, onlyname=0):
if isinstance(self.payload, NoPayload):
return self.summaryback()
else:
return self.payload.summary()
class NoPayload(Packet,object): class NoPayload(Packet,object):
@ -1993,7 +1991,7 @@ class NoPayload(Packet,object):
else: else:
raise Exception("Format not found [%s]"%fmt) raise Exception("Format not found [%s]"%fmt)
def summary(self): def summary(self):
return "" return self.summaryback()
#################### ####################