在谷歌浏览器中模拟对 etc/hosts 文件的操作

rip*_*234 36 google-chrome google-chrome-extensions hosts-file

如何设置 Chrome 以在本地而不是从标准 etc/hosts 文件中引用主机名查找?

调试网站时,有时在C:\Windows\system32\drivers\etc\hosts中设置条目将某些域替换为 localhost很有用,从而使我可以测试网站或域的动态版本与现场实际站点冲突。

我能否以模拟和简化此过程的方式设置 Google Chrome?

我不会修改浏览器实例以使其表现得好像 etc/hosts 已被修改,尽管即使这样在扩展中也可能存在太大的安全风险。

小智 13

我刚刚找到了Host Switch Plus Chrome 扩展程序,它就是这样做的;)

  • Host Switch Plus 完全不是这么做的。它改变代理。但目标是更改域IP。 (模拟 DNS 服务器) (2认同)

Aio*_*ros 8

我虔诚地使用(并且仍在使用)HostAdmin,但是每次都必须清空缓存或打开一个新的隐身窗口一直是一件苦差事,所以去年我最终为自己开发了一个 Chrome 扩展程序来帮助解决类似的情况,并且我最近在 Chrome 网上应用店中发布了一个非常粗略的版本,名为LiveHosts

其要点是,虽然@JdeBP 是正确的并且设置代理将是正确的解决方案,但它通常不是一种选择。Chrome 扩展程序无法完全复制更改主机文件时发生的情况,因此 LiveHosts 现在所做的是:

  • 允许您设置多个主机名/IP 条目;
  • 检测对定义的主机名之一的请求;
  • 使用适当的 HTTP 主机标头将请求重定向到所需的 IP;
  • 在地址栏 URL 中添加一个视觉(和丑陋,我承认)引用,它看起来像http://127.0.0.1/www.example.com/whateverelse;
  • 允许同时在不同选项卡中进行不同的主机/IP 配对。

它并不漂亮,但对于试图在环境之间快速切换的标准 Web 开发人员来说已经足够了。当然有几个注意事项:

  • 根据服务器的不同,网页中引用站点 URL 的部分(如 href 和 src 属性)可能与原始页面不同;
  • window.location 有一个不同的值,可能会抛出 JavaScript 片段;
  • 大多数跨域请求将不起作用。


Jde*_*eBP 7

实现您的实际目标的一种方法根本不涉及 Chrome 扩展程序,甚至 Chrome。那就是设置一个智能代理HTTP服务器,将Chrome指向它,然后在代理服务器上添加重写规则,在幕后重写URL。

有很多人这样做,使用各种不同的代理 HTTP 服务器 - 太多了,无法在此处的答案中详细介绍。他们这样做是为了清除广告、网络错误等,但原理和机制与您想要做的相同。他们希望 WWW 浏览器正常获取特定 URL,但它接收的实际内容是其他(本地或其他)URL 的内容。WWW 浏览器唯一需要知道的是它通过代理服务器与 Internet 通信。

例如,请参阅SourceForge 上Ad Zapper。这是一个 Perl 脚本,它与 Squid 代理 HTTP 服务器一起工作以在代理服务器中动态地重写 URL。正如您从其配置数据库中看到的那样,人们将其机制用于多种目的,从确保人们始终看到新闻服务上的“可打印”形式的文章,到摆脱互联网色情网站上的随机广告重定向。

请注意,这比您对hosts文件所做的要好得多,这是一种不适合操作 WWW 服务的机制。 hosts只处理名称→地址查找,将需要进行名称→地址查找的其他所有内容(除 WWW 浏览器外)搞砸,并且(您可能已经知道)需要将每个重写的主机名额外设置为虚拟主机目标内容 HTTP 服务器。相比之下,这种重写代理 HTTP 服务器处理 URL,并且只影响 HTTP 和配置为首先使用它的 WWW 浏览器. 所以它可以做一些事情,比如只重写 JavaScript URL,而不管同一个 WWW 站点的其他一切;将一整套主机名重写为一个;并进行(更进一步)模式匹配。(注意,在 Ad Zapper 的配置数据库中有这样的事情的实例。)并且可以做一些事情,例如让一个 WWW 浏览器通过重写代理查看世界,而另一个浏览器同时在一台机器上直接查看它。


小智 5

您可以--host-resolver-rules在启动 Chrome 时使用该参数,例如:"C:\Program Files\Google\Chrome\Application\chrome.exe" --host-resolver-rules="MAP example.com localhost","MAP example2.com localhost:1234"