def __init__(self, specimens: sl.SpecimenLoader, layer: int = -1, relativeToIP: bool = False, failOnUndissectable=True, debug=False): self.specimens = specimens self.messages = specimens.messagePool # type: OrderedDict[AbstractMessage, netzob.RawMessage] """:type messages: OrderedDict[AbstractMessage, RawMessage]""" self.baselayer = specimens.getBaseLayerOfPCAP() self.debug = debug # Cache messages that already have been parsed and labeled self._messageCache = dict() # type: Dict[netzob.RawMessage, ] self._targetlayer = layer self._relativeToIP = relativeToIP self._failOnUndissectable = failOnUndissectable self._dissections = self._dissectAndLabel(self.messages.values())
# pms.update(ParsedMessage.parseMultiple([p])) # pms = list(pms.values()) # Single messages with ParsedMessage constructor test: Dissection ran in 58.39 seconds. # pms = list() # for p in pkt: # pms.append(ParsedMessage(p)) ########################### # # Multiple messages with ParsedMessage.parseMultiple test: Dissection ran in 1.55 seconds. if args.targetlayer: pms = ParsedMessage.parseMultiple( pkt, args.targetlayer, args.relativeToIP, linktype=specimens.getBaseLayerOfPCAP()) else: pms = ParsedMessage.parseMultiple( pkt, linktype=specimens.getBaseLayerOfPCAP()) pms = list(pms.values()) print("Dissection ran in {:3.2f} seconds.".format(time.time() - st)) for pm in pms: # type: ParsedMessage pm.printUnknownTypes() ########################### # Output of dissected messages as usage example ########################### # print(pm.getFieldNames()) # # Simple field value print # for fv in pm.getFieldValues():