def testBasicParsingOldFormat(self): """Test we can parse a standard file.""" history_file = os.path.join(self.base_path, "parser_test", "History") history = chrome_history.ChromeParser(open(history_file, "rb")) entries = [x for x in history.Parse()] try: dt1 = datetime.datetime(1970, 1, 1) dt1 += datetime.timedelta(microseconds=entries[0][0]) except (TypeError, ValueError): dt1 = entries[0][0] try: dt2 = datetime.datetime(1970, 1, 1) dt2 += datetime.timedelta(microseconds=entries[-1][0]) except (TypeError, ValueError): dt2 = entries[-1][0] # Check that our results are properly time ordered time_results = [x[0] for x in entries] self.assertEqual(time_results, sorted(time_results)) self.assertEqual(str(dt1), "2011-04-07 12:03:11") self.assertEqual(entries[0][2], "http://start.ubuntu.com/10.04/Google/") self.assertEqual(str(dt2), "2011-05-23 08:37:27.061516") self.assertTrue(entries[-1][2].startswith( "https://chrome.google.com/webs" "tore/detail/mfjkgbjaikamkkojmak" "jclmkianficch")) self.assertEqual(len(entries), 71)
def testBasicParsing(self): """Test we can parse a standard file.""" history_file = os.path.join(self.base_path, "parser_test", "History2") history = chrome_history.ChromeParser(open(history_file, "rb")) entries = [x for x in history.Parse()] try: dt1 = datetime.datetime(1970, 1, 1) dt1 += datetime.timedelta(microseconds=entries[0][0]) except (TypeError, ValueError): dt1 = entries[0][0] try: dt2 = datetime.datetime(1970, 1, 1) dt2 += datetime.timedelta(microseconds=entries[-1][0]) except (TypeError, ValueError): dt2 = entries[-1][0] # Check that our results are properly time ordered time_results = [x[0] for x in entries] self.assertEqual(time_results, sorted(time_results)) self.assertEqual(str(dt1), "2013-05-03 15:11:26.556635") self.assertTrue(entries[0][2].startswith( "https://www.google.ch/search?q=why+you+shouldn")) self.assertEqual(str(dt2), "2013-05-03 15:11:39.763984") self.assertTrue(entries[-1][2].startswith("http://www.test.ch/")) self.assertEqual(len(entries), 4)
def testBasicParsingOldFormat(self): """Test we can parse a standard file.""" history_file = os.path.join(self.base_path, "History") history = chrome_history.ChromeParser(open(history_file)) entries = [x for x in history.Parse()] try: dt1 = datetime.datetime(1970, 1, 1) dt1 += datetime.timedelta(microseconds=entries[0][0]) except TypeError: dt1 = entries[0][0] except ValueError: dt1 = entries[0][0] try: dt2 = datetime.datetime(1970, 1, 1) dt2 += datetime.timedelta(microseconds=entries[-1][0]) except TypeError: dt2 = entries[-1][0] except ValueError: dt2 = entries[-1][0] self.assertEquals(str(dt1), "2011-04-07 12:03:11") self.assertEquals(entries[0][2], "http://start.ubuntu.com/10.04/Google/") self.assertEquals(str(dt2), "2011-05-23 08:36:05") self.assertEquals(entries[-1][2], "http://www.photoscreensavers.us/Cats%20Demo.exe") self.assertEquals(len(entries), 71)
def testBasicParsing(self): """Test we can parse a standard file.""" history_file = os.path.join(self.base_path, "History2") history = chrome_history.ChromeParser(open(history_file)) entries = [x for x in history.Parse()] try: dt1 = datetime.datetime(1970, 1, 1) dt1 += datetime.timedelta(microseconds=entries[0][0]) except TypeError: dt1 = entries[0][0] except ValueError: dt1 = entries[0][0] try: dt2 = datetime.datetime(1970, 1, 1) dt2 += datetime.timedelta(microseconds=entries[-1][0]) except TypeError: dt2 = entries[-1][0] except ValueError: dt2 = entries[-1][0] self.assertEquals(str(dt1), "2013-05-03 15:11:26.556635") self.assertTrue(entries[0][2].startswith( "https://www.google.ch/search?q=why+you+shouldn")) self.assertEquals(str(dt2), "2013-05-03 15:11:39.763984") self.assertTrue(entries[-1][2].startswith("http://www.test.ch/")) self.assertEquals(len(entries), 4)
def testTimeOrderingDownload(self): """Test we can correctly time order downloads and visits.""" history_file = os.path.join(self.base_path, "parser_test", "History3") history = chrome_history.ChromeParser(open(history_file, "rb")) entries = [x for x in history.Parse()] # Check that our results are properly time ordered time_results = [x[0] for x in entries] self.assertEqual(time_results, sorted(time_results)) self.assertEqual(len(entries), 23)
def ParseFiles(self, responses): """Take each file we retrieved and get the history from it.""" # Note that some of these Find requests will fail because some paths don't # exist, e.g. Chromium on most machines, so we don't check for success. if responses: for response in responses: fd = aff4.FACTORY.Open( response.stat_entry.AFF4Path(self.client_id), token=self.token) hist = chrome_history.ChromeParser(fd) count = 0 for epoch64, dtype, url, dat1, dat2, dat3 in hist.Parse(): count += 1 str_entry = "%s %s %s %s %s %s" % ( datetime.datetime.utcfromtimestamp(epoch64 / 1e6), url, dat1, dat2, dat3, dtype) self.SendReply(rdfvalue.RDFString(utils.SmartStr(str_entry))) self.Log("Wrote %d Chrome History entries for user %s from %s", count, self.args.username, response.stat_entry.pathspec.Basename()) self.state.hist_count += count