如何在命令行上捕获所有访问过的 URL?

red*_*war 3 command-line firefox bash chromium pipe

我喜欢在命令行中实时捕获我在浏览器中访问的所有 URL,以便将它们传送到另一个程序。我怎么能做到这一点?

格式应该是每行一个 URL,没有别的,没有制表符,没有空格等。

这是我到目前为止所得到的。标签移除不起作用。我看到一条评论回复了一个人(在最底部),他在将它管道到 grep 时没有问题,他应该逃避它。我真的不明白这一点。

sudo httpry -F -i eth0 -f host,request-uri | tr -d 't'
Run Code Online (Sandbox Code Playgroud)

此外,即使这有效,它也不适用于 https 对吗?有没有另一种方法可以做到这一点,包括 https?如果存在,我愿意为 Firefox 和 Chromium 使用浏览器插件。只想将所有访问过的 URL 发送到脚本。

也许我可以实时解析浏览器的历史记录并进行管道传输?

Oli*_*Oli 5

网络流量捕获是可能的,但很混乱。我的计算机上运行着许多通过 HTML 进行通信的应用程序,它们会使用自动 API 处理来填充日志,并且不会反映正在访问的内容。

正如您所说的那样,它不会向您显示 HTTPS。URL 是请求的加密部分。

我会直接定位浏览器。这些在 SQLite3 数据库中保留了足够的历史记录,一旦安装了 sqlite3 包,查询它们就变得非常简单 ( sudo apt-get install sqlite3)。你可以简单地运行:

sqlite3 ~/.mozilla/firefox/*.default/places.sqlite "select url from moz_places order by last_visit_date desc limit 10;"
Run Code Online (Sandbox Code Playgroud)

这将输出您访问过的最后 10 个 URL。

Chrome 有类似的设置,可以同样简单地查询:

sqlite3 ~/.config/google-chrome/Default/History "select url from urls order by last_visit_time desc limit 10;"
Run Code Online (Sandbox Code Playgroud)

这有效,但我在 Chrome 上遇到了一些数据库锁定问题。它在 Firefox 中似乎更可靠。我发现解决数据库锁的唯一方法是制作数据库的副本。即使主数据库被锁定并且不应该导致问题,这也有效:

cp ~/.config/google-chrome/Default/History history.tmp
sqlite3 history.tmp "select url from urls order by last_visit_time desc limit 10;"
rm history.tmp
Run Code Online (Sandbox Code Playgroud)

这种方法甚至可能也适用于 Firefox。FF 似乎没有锁定(或需要更短的锁定),但我不确定如果您在写入过程中发现它会发生什么。


要将其转换为实时显示,您需要轮询(它不涉及 SQL 查询,因此可能没问题)或使用类似inotifywait监视数据库文件的更改的内容。