LevelDB:如何从其 leveldb 中读取 Skype8 的对话
LevelDB: How to read conversation of Skype8 from its leveldb
Skype 8 的 leveldb 位于文件夹
C:\Users\machine-user-name\AppData\Roaming\Microsoft\Skype 对于 Desktop\IndexedDB\file__0.indexeddb.leveldb
我正在使用c#阅读skype 8 leveldb的内容。
这是我的代码,用于打开和迭代 leveldb 的所有键和值。
void IteratorSkypeDb()
{
var path = @"C:\Users\ptandukar\AppData\Roaming\Microsoft\Skype for Desktop\IndexedDB\file__0.indexeddb.leveldb";
Options options = new Options();
using (var db = new DB(options, path))
{
using (var iterator = db.CreateIterator(new ReadOptions()))
{
iterator.SeekToFirst();
while (iterator.IsValid())
{
var key = iterator.KeyAsString();
var value = iterator.ValueAsString();
Console.WriteLine($"{key}-{value}");
iterator.Next();
}
}
}
}
}
但是,我在初始化数据库时遇到了以下异常:
System.UnauthorizedAccessException: 'Invalid argument: idb_cmp1does not match existing comparator : leveldb.BytewiseComparator'
有人能解释一下吗?
仅供参考:我使用了 https://github.com/Reactive-Extensions/LevelDB 中的示例代码
它有一个未加载到我的 VS2017 中的本机项目,但我设法从其他 link 下载 leveldb.dll 并将其复制到 bin\debug 文件夹到 运行 程序。
您需要定义一个名为 idb_cmp1
的比较器。请参阅 github. Unclear if it is connected to the implementation of LevelDB/IndexDB used by google (see this question/answer that references the same name, implementation of the comparator that is here 上的文档,但似乎足够复杂以至于难以重新实现)
如果你只需要读取数据,而且你想读取所有数据,而且数据无序也不是问题,那么创建任何名为idb_cmp1
的比较器都是可能的没关系。二进制比较器的未经测试代码:
// Simple binary comparer
var comparator = Comparator.Create("idb_cmp1", (x, y) =>
{
NativeArray<byte> nx = (NativeArray<byte>)x;
NativeArray<byte> ny = (NativeArray<byte>)y;
long count = Math.Min((long)nx.count, (long)ny.count);
for (int i = 0; i < count; i++)
{
int cmp = nx[i].CompareTo(ny[i]);
if (cmp != 0)
{
return cmp;
}
}
return 0;
});
我尝试使用 https://github.com/tg123/IronLeveldb 并取得了一些成功。
唯一的问题是编码看起来很奇怪,我找不到使用这个库读出整个数据库的方法。我将整个 LevelDb 文件夹复制到一个测试文件夹和 运行 此代码:
var db = IronLeveldbBuilder.BuildFromPath(@"C:\test\leveldb");
IEnumerable<IByteArrayKeyValuePair> data = db.SeekFirst();
foreach (IByteArrayKeyValuePair pair in data)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine($"****{Encoding.Default.GetString(pair.Key.ToArray(), 0, pair.Key.Length)}****");
Console.ResetColor();
Console.WriteLine(Encoding.Default.GetString(pair.Value.ToArray(), 0, pair.Value.Length));
}
我刚刚添加了 *** 以使键从值中脱颖而出。
结果很有趣,我好像也有 Skype 屏蔽的消息(垃圾邮件)。
(键值对的)前几个值似乎是 "column names"
c o n v i d 创建时间
对话是我创造的时间
con v i d count s create time
对话 I d _ count s Typ e created Time
我的记忆创造了时间
对话 I d _ 是我的 M e s s a g e c e t e t e d Time
警报 C o n v i d
信息 。对话 I d
a l e r t s R e a d Time i m e s t a m p
然后进一步讨论一些对话数据:
**** 0 1 9 : 1 3 4 1 9 5 1 e a a 3 8 4 7 e 5 a 3 8 4 a f 9 5 2 a a f 0 0 d 9 @t h re a d 。天空 1 7 4 3 5 8 1 1 3 8 5 3 9 3 0 3 4 0 9 3****
1535543604069"composetime"2018-08-29T11:53:23.825Z"clientmessageid"17435811385393034093"conversationLink"zhttps://db5-client-s.gateway.messenger.live.com/v1/users/ME/conversations/19:1341951eaa3847e5a384af952@aaf00 =43=]"content"-我已经做了 DNS 健康检查,但仍有一些东西处于警告或错误状态,可能是由于传播,所以我也会继续检查。"type"消息"conversationid"019:1341951eaa3847e5a384af952aaf00d9@thread.skype"from"Ohttps://db5-client-s.gateway.messenger.live.com/v1/users/ME/contacts/8:evn26041{$ "cuid"17435811385393034093"conversationId"019:1341951eaa3847e5a384af952aaf00d9@thread.skype"createdTimeN P6XXvB"创作者”
8:evn26041"content"-我已经做了 DNS 健康检查,但仍有一些东西处于警告或错误状态,可能是由于传播,所以我也会继续检查。"messagetypeRichText"内容类型_”
properties_"_isEphemeralF"fileEncryptionKeys"_countsTypeI"_isMyMessageI {
Skype 8 的 leveldb 位于文件夹
C:\Users\machine-user-name\AppData\Roaming\Microsoft\Skype 对于 Desktop\IndexedDB\file__0.indexeddb.leveldb
我正在使用c#阅读skype 8 leveldb的内容。 这是我的代码,用于打开和迭代 leveldb 的所有键和值。
void IteratorSkypeDb()
{
var path = @"C:\Users\ptandukar\AppData\Roaming\Microsoft\Skype for Desktop\IndexedDB\file__0.indexeddb.leveldb";
Options options = new Options();
using (var db = new DB(options, path))
{
using (var iterator = db.CreateIterator(new ReadOptions()))
{
iterator.SeekToFirst();
while (iterator.IsValid())
{
var key = iterator.KeyAsString();
var value = iterator.ValueAsString();
Console.WriteLine($"{key}-{value}");
iterator.Next();
}
}
}
}
}
但是,我在初始化数据库时遇到了以下异常:
System.UnauthorizedAccessException: 'Invalid argument: idb_cmp1does not match existing comparator : leveldb.BytewiseComparator'
有人能解释一下吗?
仅供参考:我使用了 https://github.com/Reactive-Extensions/LevelDB 中的示例代码 它有一个未加载到我的 VS2017 中的本机项目,但我设法从其他 link 下载 leveldb.dll 并将其复制到 bin\debug 文件夹到 运行 程序。
您需要定义一个名为 idb_cmp1
的比较器。请参阅 github. Unclear if it is connected to the implementation of LevelDB/IndexDB used by google (see this
如果你只需要读取数据,而且你想读取所有数据,而且数据无序也不是问题,那么创建任何名为idb_cmp1
的比较器都是可能的没关系。二进制比较器的未经测试代码:
// Simple binary comparer
var comparator = Comparator.Create("idb_cmp1", (x, y) =>
{
NativeArray<byte> nx = (NativeArray<byte>)x;
NativeArray<byte> ny = (NativeArray<byte>)y;
long count = Math.Min((long)nx.count, (long)ny.count);
for (int i = 0; i < count; i++)
{
int cmp = nx[i].CompareTo(ny[i]);
if (cmp != 0)
{
return cmp;
}
}
return 0;
});
我尝试使用 https://github.com/tg123/IronLeveldb 并取得了一些成功。 唯一的问题是编码看起来很奇怪,我找不到使用这个库读出整个数据库的方法。我将整个 LevelDb 文件夹复制到一个测试文件夹和 运行 此代码:
var db = IronLeveldbBuilder.BuildFromPath(@"C:\test\leveldb");
IEnumerable<IByteArrayKeyValuePair> data = db.SeekFirst();
foreach (IByteArrayKeyValuePair pair in data)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine($"****{Encoding.Default.GetString(pair.Key.ToArray(), 0, pair.Key.Length)}****");
Console.ResetColor();
Console.WriteLine(Encoding.Default.GetString(pair.Value.ToArray(), 0, pair.Value.Length));
}
我刚刚添加了 *** 以使键从值中脱颖而出。 结果很有趣,我好像也有 Skype 屏蔽的消息(垃圾邮件)。
(键值对的)前几个值似乎是 "column names"
c o n v i d 创建时间 对话是我创造的时间 con v i d count s create time 对话 I d _ count s Typ e created Time 我的记忆创造了时间 对话 I d _ 是我的 M e s s a g e c e t e t e d Time 警报 C o n v i d 信息 。对话 I d a l e r t s R e a d Time i m e s t a m p
然后进一步讨论一些对话数据:
**** 0 1 9 : 1 3 4 1 9 5 1 e a a 3 8 4 7 e 5 a 3 8 4 a f 9 5 2 a a f 0 0 d 9 @t h re a d 。天空 1 7 4 3 5 8 1 1 3 8 5 3 9 3 0 3 4 0 9 3**** 1535543604069"composetime"2018-08-29T11:53:23.825Z"clientmessageid"17435811385393034093"conversationLink"zhttps://db5-client-s.gateway.messenger.live.com/v1/users/ME/conversations/19:1341951eaa3847e5a384af952@aaf00 =43=]"content"-我已经做了 DNS 健康检查,但仍有一些东西处于警告或错误状态,可能是由于传播,所以我也会继续检查。"type"消息"conversationid"019:1341951eaa3847e5a384af952aaf00d9@thread.skype"from"Ohttps://db5-client-s.gateway.messenger.live.com/v1/users/ME/contacts/8:evn26041{$ "cuid"17435811385393034093"conversationId"019:1341951eaa3847e5a384af952aaf00d9@thread.skype"createdTimeN P6XXvB"创作者” 8:evn26041"content"-我已经做了 DNS 健康检查,但仍有一些东西处于警告或错误状态,可能是由于传播,所以我也会继续检查。"messagetypeRichText"内容类型_” properties_"_isEphemeralF"fileEncryptionKeys"_countsTypeI"_isMyMessageI {