MOD: improved scan handling, updated index schema

This commit is contained in:
JohnE 2016-02-29 17:12:19 -08:00
parent 8c1366d8cd
commit 40d10614a9
3 changed files with 30 additions and 32 deletions

View File

@ -154,7 +154,7 @@ def queryMD5(fp_dir, md5_db):
try: try:
fp = FingerprintIndex() fp = FingerprintIndex()
fp.openIndex(fp_dir) fp.openIndex(fp_dir)
results = fp.queryMetadata(md5_db) results = fp.queryAppDetails(md5_db)
for row in results: for row in results:
print "[{}]\nDB: {}\nFP: {}\nDate: {}\n".format(row[0], row[2], row[3], row[4]) print "[{}]\nDB: {}\nFP: {}\nDate: {}\n".format(row[0], row[2], row[3], row[4])
except Exception as ex: except Exception as ex:

View File

@ -50,13 +50,13 @@ class FingerprintDB:
self.table_hashes = None self.table_hashes = None
self.filein = "" self.filein = ""
self.init = False self.init = False
# fingerprint metadata # db file details
self.metadata = {} self.file_details = {}
self.metadata['db-name'] = "" self.file_details['db-name'] = ""
self.metadata['app-name'] = "" self.file_details['app-name'] = ""
self.metadata['app-ver'] = "" self.file_details['app-ver'] = ""
self.metadata['notes'] = "" self.file_details['notes'] = ""
self.metadata['scan-date'] = "" self.file_details['scan-date'] = ""
# #
def scanDBFile(self, filein): def scanDBFile(self, filein):
@ -64,22 +64,20 @@ class FingerprintDB:
try: try:
(self.conn, self.cur) = self.__openDB(filein) (self.conn, self.cur) = self.__openDB(filein)
except Exception, ex: except Exception, ex:
logging.info(ex)
raise raise
try: try:
# extract file name from path+filename # extract file name from path+filename
self.metadata['db-name'] = os.path.basename(filein) self.file_details['db-name'] = os.path.basename(filein)
except Exception as ex: except Exception as ex:
logging.error(ex) logging.warn(ex)
self.metadata['db-name'] = filein self.file_details['db-name'] = filein
try: try:
# read database schema, parse the schema # read database schema, parse the schema
self.__readDatabase() self.__readDatabase()
# concat all the table create statements, then md5 # concat all the table create statements, then md5
self.__createMD5DB() self.__createMD5DB()
except Exception as ex: except Exception as ex:
logging.error(ex)
raise raise
# create and index of table hashes # create and index of table hashes
@ -166,7 +164,7 @@ class FingerprintDB:
dbmt = jsonData['db-metadata'] dbmt = jsonData['db-metadata']
dbht = jsonData['db-metadata-hashes'] dbht = jsonData['db-metadata-hashes']
dbmd5 = jsonData['db-metadata-md5'] dbmd5 = jsonData['db-metadata-md5']
metadata = jsonData['_file-metadata'] metadata = jsonData['_file-details']
all_tables = tb.keys() all_tables = tb.keys()
for table_name in all_tables: for table_name in all_tables:
@ -178,7 +176,7 @@ class FingerprintDB:
self.tables = tables self.tables = tables
self.db_hash = dbmd5 self.db_hash = dbmd5
self.table_hashes = dbht self.table_hashes = dbht
self.metadata = metadata self.file_details = metadata
except Exception as ex: except Exception as ex:
logging.error("ERROR: problem loading json file: \n{}\n{}".format(file_json, ex)) logging.error("ERROR: problem loading json file: \n{}\n{}".format(file_json, ex))
@ -305,7 +303,7 @@ class FingerprintDB:
dmhash = {} dmhash = {}
shash = {} shash = {}
mhash = {} mhash = {}
ahash['_file-metadata'] = mhash ahash['_file-details'] = mhash
ahash['db-metadata'] = dmhash ahash['db-metadata'] = dmhash
ahash['db-metadata-hashes'] = shash ahash['db-metadata-hashes'] = shash
ahash['db-metadata-md5'] = None ahash['db-metadata-md5'] = None
@ -320,10 +318,10 @@ class FingerprintDB:
mhash['format-ver'] = self.format_ver mhash['format-ver'] = self.format_ver
mhash['scanner-ver'] = self.scanner_ver mhash['scanner-ver'] = self.scanner_ver
mhash['scanner-name'] = 'dbfp' mhash['scanner-name'] = 'dbfp'
mhash['db-name'] = self.metadata['db-name'] mhash['db-name'] = self.file_details['db-name']
mhash['app-name'] = self.metadata['app-name'] mhash['app-name'] = self.file_details['app-name']
mhash['app-ver'] = self.metadata['app-ver'] mhash['app-ver'] = self.file_details['app-ver']
mhash['notes'] = self.metadata['notes'] mhash['notes'] = self.file_details['notes']
# tables # tables
tables = self.tables.keys() tables = self.tables.keys()
@ -356,15 +354,15 @@ class FingerprintDB:
# #
def setAppName(self, name): def setAppName(self, name):
self.metadata['app-name'] = name self.file_details['app-name'] = name
# #
def setAppVer(self, version): def setAppVer(self, version):
self.metadata['app-ver'] = version self.file_details['app-ver'] = version
# #
def setNotes(self, notes): def setNotes(self, notes):
self.metadata['notes'] = notes self.file_details['notes'] = notes
# #
def getErrorString(self, errorCode): def getErrorString(self, errorCode):

View File

@ -98,8 +98,8 @@ class FingerprintIndex:
return rows return rows
# #
def queryMetadata(self, md5_db): def queryAppDetails(self, md5_db):
rows = self.__qMetadata(md5_db) rows = self.__qAppDetails(md5_db)
return rows return rows
# #
@ -141,11 +141,11 @@ class FingerprintIndex:
logging.error(ex) logging.error(ex)
# #
def __qMetadata(self, md5_db): def __qAppDetails(self, md5_db):
try: try:
rows = self.cur.execute(''' rows = self.cur.execute('''
SELECT app_name, app_ver, db_file, fp_file, scan_date SELECT app_name, app_ver, db_file, fp_file, scan_date
FROM metadata FROM file_details
WHERE md5_db=? WHERE md5_db=?
''', [md5_db]) ''', [md5_db])
@ -175,7 +175,7 @@ class FingerprintIndex:
fp_count INTEGER); fp_count INTEGER);
''') ''')
self.db_conn.execute(''' self.db_conn.execute('''
CREATE TABLE metadata ( CREATE TABLE file_details (
md5_db TEXT, md5_db TEXT,
app_name TEXT, app_name TEXT,
app_ver TEXT, app_ver TEXT,
@ -207,7 +207,7 @@ class FingerprintIndex:
db.importJson(fq_file) db.importJson(fq_file)
self.__insertMod_md5_all(db.db_hash, db.table_hashes.values(), file) self.__insertMod_md5_all(db.db_hash, db.table_hashes.values(), file)
self.__insertMod_md5_tables(db.table_hashes.values(), file) self.__insertMod_md5_tables(db.table_hashes.values(), file)
self.__insertMod_metadata(db, file) self.__insertMod_file_details(db, file)
finCount = finCount+1 finCount = finCount+1
self.db_conn.commit() self.db_conn.commit()
except Exception as ex: except Exception as ex:
@ -266,12 +266,12 @@ class FingerprintIndex:
raise FingerprintIndexWrite("Error inserting a row\n{}".format(ex)) raise FingerprintIndexWrite("Error inserting a row\n{}".format(ex))
# #
def __insertMod_metadata(self, db, filename): def __insertMod_file_details(self, db, filename):
try: try:
self.db_conn.execute( self.db_conn.execute(
''' '''
INSERT INTO metadata VALUES(?, ?, ?, ?, ?, ?) INSERT INTO file_details VALUES(?, ?, ?, ?, ?, ?)
''', [db.db_hash, db.metadata['app-name'], db.metadata['app-ver'], db.metadata['db-name'], filename, db.metadata['scan-date']]) ''', [db.db_hash, db.file_details['app-name'], db.file_details['app-ver'], db.file_details['db-name'], filename, db.file_details['scan-date']])
except Exception as ex: except Exception as ex:
print ex print ex
raise raise