python - 以编程方式读取 firefox 缓存

标签 python c linux firefox

我关于如何煞费苦心地读取 firefox 缓存、搜索主机匹配正则表达式模式的图像 URL 的想法是检索 ~/.cache/mozilla/firefox/[]/cache2 下的缓存文件的所有内容,然后仅过滤包含图像 URL 的行。

这是缓存文件的示例:

.2.U.2.;...V.... 57 00000380: 0000 513a 6874 7470 3a2f 2f77 7777 2e74 ..Q:http://www.t 58 00000390: 6563 686e 6970 6167 6573 2e63 6f6d 2f77 echnipages.com/w 59 000003a0: 702d 636f 6e74 656e 742f 706c 7567 696e p-content/plugin 60 000003b0: 732f 7961 7369 702f 696d 6167 6573 2f64 s/yasip/images/d 61 000003c0: 6566 6175 6c74 2f72 7373 5f33 3278 3332 efault/rss_32x32 62 000003d0: 2e70 6e67 006e 6563 6b6f 3a63 6c61 7373 .png.necko:class 63 000003e0: 6966 6965 6400 3100 7265 7175 6573 742d

因为这些缓存文件好像是二进制文件,所以我会设置一个指向http的'h'的指针/任何东西,只要下一个字母的十六进制值为00就可以向前读取,在ascii表上似乎是“\0”。

为了防止重复,我会将这些 URL 写入一个文件,每次找到一个新 URL 时,我都会首先检查该文件的所有条目,以查看该 URL 是否已经存在。


这是最简单的方法,还是我遗漏了什么?我不想为此任务使用其他应用程序/扩展程序。

谢谢

最佳答案

以下应该大致完成您要实现的目标:

import glob, re

cache_folder = r"~/.cache/mozilla/firefox/[]/cache2\*"
urls = set()

for cache_filename in glob.glob(cache_folder):
    with open(cache_filename, 'rb') as file_cache:
        data = file_cache.read()
        urls |= set(re.findall("(http.*?)\x00", data))

for url in urls:
    print url

这会读取在缓存文件夹中找到的每个文件,并获取每个文件中所有 URL 的列表。然后它将所有这些匹配的 URL 存储到一个 set 中以避免任何重复。然后它会显示设置的条目。

您还可以考虑研究这些文件的格式。

关于python - 以编程方式读取 firefox 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307941/

相关文章:

c - MS CryptoAPI - 带有错误 0x80090016 (NTE_BAD_KEYSET) 的机器 keystore ,带有 certreq 创建的 key

Linux,系统守护进程和其他进程的返回码存储在哪里?

linux - rsync 制作平面副本

python - 从 Google Maps API v3 获取纬度和经度

python - 使用 pip 安装 pysaml2 - xmlsec1 要求

python - 如何过滤 Pandas 中的分类数据

python - Numpy dot() 和数组转换性能优化

C - 如何从c文件中删除与用户输入相同的字符串?

C编程: Finding max in a file string

linux - 无法读取 bash 脚本中的第二个参数