【发布时间】:2012-11-10 23:00:04
【问题描述】:
是否有可用于搜索 Sqlite 数据库的所有表和列的库或开源实用程序?唯一的输入是 sqlite DB 文件的名称。
我正在尝试编写取证工具并希望在 sqlite 文件中搜索特定字符串。
【问题讨论】:
是否有可用于搜索 Sqlite 数据库的所有表和列的库或开源实用程序?唯一的输入是 sqlite DB 文件的名称。
我正在尝试编写取证工具并希望在 sqlite 文件中搜索特定字符串。
【问题讨论】:
只需转储数据库并搜索它。
% sqlite3 file_name .dump | grep 'my_search_string'
您可以改为通过 less 管道,然后使用 / 进行搜索:
% sqlite3 file_name .dump | less
【讨论】:
@MrWorf 的回答不适用于我的 sqlite 文件(来自 Evernote 的 .exb 文件),但这种类似的方法有效:
sqlitebrowser mynotes.exb
grep 'STRING I WANT" mynotes.exb.sql【讨论】:
我知道聚会迟到了,但我遇到了类似的问题,但由于它位于 docker 映像中,我无法访问 python,所以我这样解决了:
for X in $(sqlite3 database.db .tables) ; do sqlite3 database.db "SELECT * FROM $X;" | grep >/dev/null 'STRING I WANT' && echo $X; done
这将遍历数据库文件中的所有表并执行全选操作,然后我对字符串进行 grep。如果找到字符串,它会打印表格,然后我可以简单地使用 sqlite3 来了解它是如何使用的。
认为它可能对其他无法使用 python 的人有所帮助。
【讨论】:
你可以使用"SELECT name FROM sqlite_master WHERE type='table'"
找出数据库中表的名称。从那里很容易选择每个表的所有行。
例如:
import sqlite3
import os
filename = ...
with sqlite3.connect(filename) as conn:
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
for tablerow in cursor.fetchall():
table = tablerow[0]
cursor.execute("SELECT * FROM {t}".format(t = table))
for row in cursor:
for field in row.keys():
print(table, field, row[field])
【讨论】:
sqlite3.Row 行工厂。这使得cursor 返回类似字典的行。行键是列名。