def updateMessageList(self): # We read each file and create one message for each file fileNumber = 0 # We split the content of each message and retrieve new messages self.retrieveMessagesFromFiles() new_messages = [] for message in self.messages: lineNumber = 0 if len(self.lineSeparator) > 0: splittedStrHexData = message.getData().split(self.lineSeparator) else: splittedStrHexData = [message.getData()] for s in splittedStrHexData: if len(s) > 0: message = FileMessage(str(uuid.uuid4()), 0, s, message.getFilename(), message.getCreationDate(), message.getModificationDate(), message.getOwner(), message.getSize(), lineNumber) new_messages.append(message) lineNumber += 1 # We save the new messages self.messages = [] self.messages.extend(new_messages) self.lineView.get_model().clear() for message in self.messages: self.lineView.get_model().append(None, [message.getID(), message.getData()]) # We clean the display self.textview.get_buffer().delete(self.textview.get_buffer().get_start_iter(), self.textview.get_buffer().get_end_iter())
def retrieveMessagesFromFiles(self): # We capture the current environment self.envDeps.captureEnvData() # We read each file and create one message for each file fileNumber = 0 self.messages = [] self.lineView.get_model().clear() for file in self.filesToBeImported: # Extraction of the metadata fileName = file.strip() size = os.path.getsize(file) creationDate = datetime.datetime.fromtimestamp(os.path.getctime(file)) modificationDate = datetime.datetime.fromtimestamp(os.path.getmtime(file)) owner = "none" # Retrieve the binary content of the file content = self.getNetzobRawContentOfFile(file) if not len(content) > 0: continue # Create a message message = FileMessage(str(uuid.uuid4()), 0, content, fileName, creationDate, modificationDate, owner, size, 0) self.messages.append(message) self.lineView.get_model().append(None, [message.getID(), content]) fileNumber += 1 # We clean the display self.textview.get_buffer().insert_with_tags_by_name(self.textview.get_buffer().get_start_iter(), "", "normalTag")
def readMessages(self): # Iterate over all imported files and split them # according to the set separator self.messages = [] for fileMessage in self.importedFiles: lineNumber = 0 if len(self.messageSeparator) > 0: splittedStrHexData = fileMessage.getData().split( self.messageSeparator) if self.messageSeparatorStrategy != DelimiterSeparatedImporter.SEPARATOR_STRATEGY_DELETE: i_s = 0 l_s = len(splittedStrHexData) for s in splittedStrHexData: if self.messageSeparatorStrategy == DelimiterSeparatedImporter.SEPARATOR_STRATEGY_KEEP_END: if fileMessage.getData().endswith( self.messageSeparator): limit = l_s else: limit = l_s - 1 if i_s < limit: splittedStrHexData[ i_s] = s + self.messageSeparator if self.messageSeparatorStrategy == DelimiterSeparatedImporter.SEPARATOR_STRATEGY_KEEP_START: if fileMessage.getData().startswith( self.messageSeparator): limit = 0 else: limit = 1 if i_s >= limit: splittedStrHexData[ i_s] = self.messageSeparator + s i_s += 1 else: splittedStrHexData = [fileMessage.getData()] i_s = 0 for s in splittedStrHexData: if len(s) > 0: message = FileMessage(str(uuid.uuid4()), 0, s, fileMessage.getFilename(), fileMessage.getCreationDate(), fileMessage.getModificationDate(), fileMessage.getOwner(), fileMessage.getSize(), lineNumber) self.messages.append(message) i_s += 1
def setSourceFiles(self, filePathList): self.importedFiles = [] for filePath in filePathList: size = os.path.getsize(filePath) creationDate = datetime.datetime.fromtimestamp( os.path.getctime(filePath)) modificationDate = datetime.datetime.fromtimestamp( os.path.getmtime(filePath)) owner = "none" # Retrieve the binary content of the file content = self._getNetzobRawContentOfFile(filePath) if not len(content) > 0: continue # Create a message message = FileMessage(str(uuid.uuid4()), 0, content, filePath, creationDate, modificationDate, owner, size, 0) self.importedFiles.append(message)
def loadFromXML(rootElement, namespace, version, id, timestamp, data): # Retrieves the lineNumber (default -1) msg_lineNumber = int( rootElement.find("{" + namespace + "}lineNumber").text) # Retrieves the filename msg_filename = rootElement.find("{" + namespace + "}filename").text.encode("utf-8") # Retrieves the creation date msg_creationDate = TypeConvertor.xsdDatetime2PythonDatetime( rootElement.find("{" + namespace + "}creationDate").text) # Retrieves the modification date if rootElement.find("{" + namespace + "}modificationDate").text is not None: msg_modificationDate = TypeConvertor.xsdDatetime2PythonDatetime( rootElement.find("{" + namespace + "}modificationDate").text) else: msg_modificationDate = msg_creationDate # Retrieves the owner msg_owner = rootElement.find("{" + namespace + "}owner").text # Retrieves the size msg_size = int(rootElement.find("{" + namespace + "}size").text) # TODO : verify this ! Circular imports in python ! # WARNING : verify this ! Circular imports in python ! from netzob.Common.Models.FileMessage import FileMessage result = FileMessage(id, timestamp, data, msg_filename, msg_creationDate, msg_modificationDate, msg_owner, msg_size, msg_lineNumber) return result