使用 Windows hosts 文件,可以将域的流量重定向到特定的 IP 地址,例如
域名A.com-->127.0.0.1
我正在寻找一种简单的方法来做同样的事情,但针对的是目标域名而不是目标 IP 地址(因为这是动态的),即
域名A.com-->域名B.com
添加: 在得到一些初步答案后,我想我需要具体化我的问题。
情况:我有一个应用程序,它通过 DNS 查找目标域的 IP,然后通过 HTTP 连接到该 IP 地址。我无法控制任何代理设置。
选项1 基本上我正在寻找一种方法来:
- 拦截对 domainA.com 的 DNS 请求
- 对域 B.com 发起 DNS 请求
- 为 domainA.com 的请求提供 domainB.com 的 IP
无需运行整个 DNS 服务器。
选项 2 如果 DNS 服务器是唯一的方法,那么作为替代方案,我也很乐意找到一个解决方案,即如何为单个应用程序定义非标准 DNS 服务器。对于包装应用程序等,您有什么想法吗?
答案1
第三种解决方案
除了设置 dns 服务器和向 gethostbyname 中注入钩子之外:
将脚本注册为服务,定期解析 domainB.com 并修改 /etc/hosts 文件中 domainA.com 的条目。由于大多数 dns 条目不会经常更改,因此在启动时或每天运行一次脚本就足够了。
我正在使用这样的脚本来更新我家里的电脑上的域名黑名单。
答案2
编辑 - 重新阅读您的问题后,我认为如果没有指向本地 DNS 服务器,这将是不可能的,因为 hosts 文件仅支持 FQDN --> IP。不过,我认为最好的选择是某种本地重定向代理服务器,或者可以重写主机头的插件。
但是,我写了一个你可能会感兴趣的指南,希望它能更好地向你解释一些事情......:
这不是很容易解释,所以如果您有任何后续问题,请在评论中写下,我很乐意为您提供帮助:
这不可能但将 IP 放入其中,将得到完全相同的最终结果。
请记住,最终,当您定位 FQDN(完全限定域名)时所发生的一切就是将该地址转换为 IP 地址。
如果您想要将任何访问者转发domainA.com
至domainB.com
,您只需将domainB.com
的 IP 作为domainA.com
的条目放入 hosts 文件中。
这会导致任何定位/访问domainA.com
都被重定向到domainB.com
。
然而我猜你想重定向一个网站。网站比这复杂得多,协议的一部分会发送一个称为 的东西Host Header
。这是网络浏览器联系网络服务器的地方和告诉它正在尝试访问的地址。
例如,访问 Google.com 会显示以下内容:
(注意那条Host:
线)。
您还可以通过 IP 地址访问 Google.com -http://74.125.230.115- 这是因为他们设置了一个默认条目来服务所有请求不是匹配主机头。
因此,当您访问时,domainA.com
可能domainB.com
仅向domainB.com
将主机标头设置为 的用户提供内容domainB.com
。
您需要做的是使用代理服务器、防火墙 (DPI) 或某种实际上重写主机标头/重定向的插件。或者,如果您控制 Web 服务器 domainB.com ,则只需将其添加domainA.com
到它将监听的地址 - 然后是任何主机标头- 它将使用 的内容domainA.com
进行响应。domainB.com
在 IIS 中添加附加主机头:
答案3
您可以设置这样的使用 Privoxy 进行重定向操作。
答案4
选项 2 的解决方案
以防将来其他人遇到这个问题:可以拦截来自单个应用程序的 DNS 请求,而无需使用影响所有功能的 hosts 文件。
查看代码项目“使用正则表达式拦截并重写 DNS 请求”作者:丹·法里诺