def CreateArchive(self, _): # Create an output zip or tar file in the temp space. with aff4.FACTORY.Create(None, "TempImageFile", token=self.token) as outfd: if self.args.format == self.args.ArchiveFormat.ZIP: file_extension = "zip" elif self.args.format == self.args.ArchiveFormat.TAR_GZ: file_extension = "tar.gz" else: raise ValueError("Unknown archive format: %s" % self.args.format) outfd.urn = outfd.urn.Add("%s_%X%X.%s" % ( self.args.target_file_prefix, utils.PRNG.GetULong(), utils.PRNG.GetULong(), file_extension)) self.Log("Will create output on %s" % outfd.urn) self.state.output_archive_urn = outfd.urn collection = aff4.FACTORY.Open(self.args.collection_urn, token=self.token) buffered_outfd = io.BufferedWriter(RawIOBaseBridge(outfd), buffer_size=1024 * 1024 * 12) if self.args.format == self.args.ArchiveFormat.ZIP: streaming_writer = utils.StreamingZipWriter(buffered_outfd, "w", zipfile.ZIP_DEFLATED) elif self.args.format == self.args.ArchiveFormat.TAR_GZ: streaming_writer = utils.StreamingTarWriter(buffered_outfd, "w:gz") else: raise ValueError("Unknown archive format: %s" % self.args.format) with streaming_writer: self.DownloadCollectionFiles(collection, streaming_writer, self.args.target_file_prefix) self.state.output_size = rdfvalue.ByteSize(outfd.size)
def testParsing(self): cases = [ ("100gb", 100 * 1000**3), ("10kib", 10 * 1024), ("2.5kb", 2500), ("3.25MiB", 3.25 * 1024**2), ("12B", 12), ] for string, expected in cases: self.assertEqual(expected, rdfvalue.ByteSize(string))
def CreateArchive(self, _): # Create an output zip or tar file in the temp space. with aff4.FACTORY.Create(None, "TempImageFile", token=self.token) as outfd: friendly_hunt_name = self.args.hunt_urn.Basename().replace( ":", "_") if self.args.format == self.args.ArchiveFormat.ZIP: file_extension = "zip" elif self.args.format == self.args.ArchiveFormat.TAR_GZIP: file_extension = "tar.gz" else: raise ValueError("Unknown archive format: %s" % self.args.format) outfd.urn = outfd.urn.Add( "hunt_%s_%X%X.%s" % (friendly_hunt_name, utils.PRNG.GetULong(), utils.PRNG.GetULong(), file_extension)) self.Log("Will create output on %s" % outfd.urn) self.state.output_archive_urn = outfd.urn hunt = aff4.FACTORY.Open(self.args.hunt_urn, aff4_type="GRRHunt", token=self.token) hunt_output_urn = hunt.state.context.results_collection_urn collection = aff4.FACTORY.Open(hunt_output_urn, aff4_type="RDFValueCollection", token=self.token) buffered_outfd = io.BufferedWriter(RawIOBaseBridge(outfd), buffer_size=1024 * 1024 * 12) if self.args.format == self.args.ArchiveFormat.ZIP: streaming_writer = utils.StreamingZipWriter( buffered_outfd, "w", zipfile.ZIP_DEFLATED) elif self.args.format == self.args.ArchiveFormat.TAR_GZIP: streaming_writer = utils.StreamingTarWriter( buffered_outfd, "w:gz") else: raise ValueError("Unknown archive format: %s" % self.args.format) with streaming_writer: self.DownloadCollectionFiles(collection, streaming_writer, friendly_hunt_name) self.state.output_size = rdfvalue.ByteSize(outfd.size)
def testParsing(self): for string, expected in [("100gb", 100 * 1000**3), ("10kib", 10 * 1024), ("2.5kb", 2500)]: self.assertEqual(expected, rdfvalue.ByteSize(string))
def GenerateSample(self, number=5): return rdfvalue.ByteSize("%sKib" % number)
def Run(self, args): _ = args self.SendReply(rdfvalue.ByteSize(psutil.virtual_memory()[0]))