本质上,我希望将我的机器上某个网站的所有请求重定向到另一个网站。
例如:你 ping yahoo.com,结果 ping 的却是 google.com。
或者一个更有用的例子:每个对 facebook.com 的请求都会自动发送为https://facebook.com
答案1
您可以通过修改文件来重定向本地内容/etc/hosts
。
然而,您对 http/https 的要求却完全不同。
实现此目的的一种方法是设置本地代理并设置必要的规则。请记住,必须将本地代理设置为忽略 hosts 文件并使用上游 dns 解析 ip 地址。
大致如下:
- 浏览器请求http://facebook.com通过代理。
- 代理重定向http://facebook.com到https://facebook.com
- 浏览器请求https://facebook.com通过代理。
- 代理忽略 hosts 文件的内容。
- 代理通过隧道建立连接。
答案2
正如评论中指出的,您的两个例子是完全不同的主题。
如果我由于某种原因必须实现这一点(现在想不出任何原因),我会编辑第一个例子的主机文件(如果需要修改的列表很小),或者设置我自己的本地 DNS 服务器来修改响应。
对于第二个示例,您可能会使用专门配置的代理服务器,该服务器会根据需要重写请求。但请注意,这不能以“一网打尽”的方式完成,因为大多数网站不提供 SSL 服务,因此仅将每个查询重定向到相应的 https 变体是行不通的。
答案3
您可以使用 Squid 缓存代理程序完成一些操作。/etc/hosts 技巧在这种情况下不起作用,因为它不够智能,无法执行端口级重定向,例如从 http: 到 https: 所需的重定向。我相信 Squid 中的重定向规则足够强大,可以编写其中一些过滤器。将它安装在本地主机上,您可以执行拦截代理(我相信),这样它对用户来说是不可见的。
不过,这是 HTTP 级别的重定向,而不是 IP 级别的重定向。对于纯 IP,您还需要其他东西。/etc/hosts 文件可以做很多事情,但要么全部做,要么全部不做。如果您需要将逻辑插入到重定向的内容中,则如果目的地 = A,则发送到 B那么你将需要另一个包。
答案4
编辑您的/etc/hosts:
#yahoo's IP address
69.147.114.224 google.com
至于 Facebook,您需要运行 DNS 服务器并将 webhop 设置为 https:// 站点而不是 http:// 站点。