我可以创建覆盖dns类似于在没有root访问权限的情况下在/ etc / hosts中写入


48

我想设置我的浏览器将使用的dns记录,但是我没有root访问权,因此无法进行修改/etc/hosts。我需要使用apache测试虚拟主机,而dns尚未设置。我可以使用firefox和chrome,因此,如果有一个插件可以方便使用它;或其他选项很有帮助。

更新:替代dns的替代方法可能是修改HTTP标头,如果将正确的标头发送到apache,则应返回正确的内容。


1
最后一行不清楚。另外,这会更适合SF吗?
tshepang'2

@tshepang ...不,因为我需要在Linux桌面上执行此操作?
xenoterracide

1
还是不太清楚。“或其他选择有帮助”到底是什么意思?不要让我猜。
tshepang 2011年

3
@tshepang我不知道我在寻找什么...如果我知道我为什么要问?可能有我未曾考虑过的选择。我觉得您是在要求我解释apache虚拟主机,http和dns如何一起工作。
xenoterracide 2011年

我认为您正在寻找的是:unix.stackexchange.com/a/104511/135943
通配符

Answers:


65

我一直在寻找一种方法来运行具有经过修改的DNS分辨率的程序以进行测试。对我来说,解决方案是使用HOSTALIASES环境变量:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

请参阅hostname(7)

(附带说明:在示例中,HOSTALIASES环境变量仅影响wget进程。当然,您可以export HOSTALIASES使它对当前Shell的所有子进程都有效。)


1
真的,这应该像+ 10k,不幸的是我只能给你+1
xenoterracide 2012年

我同意!+ 10k!
Anders Hansson

3
非常感谢!本示例应预先考虑export在大多数情况下:export HOSTALIASES=~/.hosts
ezequiel-garzon 2014年

8
似乎仅支持主机到主机的别名,不支持IP,并且主机不能包含“。”。
netawater

Windows是否有相同的解决方案?
Akceptor

10

您可以在libc函数周围编写包装器来解析主机名,并在与/ etc / hosts不同的文件中查找它们。然后运行您要使用hosts文件的任何应用程序

LD_PRELOAD=wrapper.so firefox

4
最有用的是,使包装器将的打开重定向/etc/nsswitch.conf~/.nsswitch.conf,并使其~/.nsswitch.conf查询您的DNS数据库。
吉尔斯(Gilles)'所以

6

我认为最好的方法是设置SOCKS5代理,并告诉firefox通过SOCKS5代理(network.proxy.socks_remote_dns)发送DNS请求。您可以很容易地用openssh设置socks5代理(-D选项),并让远程主机运行自定义/ etc / hosts或类似DNSMasq的名称,以进行更复杂的DNS设置。实际上,这实际上将DNS设置的配置推送到可以在系统范围内进行更改的系统。


说来容易做起来

5

在超级用户处查看以下问题:

https://superuser.com/questions/184643/override-dns-in-firefox

如果讨论的选项和SO链接不是可行的解决方案,请查看:

https://superuser.com/questions/100239/hostname-override-in-firefox

特别是检查:

https://addons.mozilla.org/zh-CN/firefox/addon/redirector/

听起来这个插件可以提供帮助-但我取决于它的实际实现。


不幸的是,与该问题中的操作非常相似,这些似乎都不可行。
xenoterracide

@xenoterracide-我更新了答案-也许重定向器附加组件是一个选择?
maxschlepzig 2011年

我不这么认为。.我真正需要做的是修改发送的HTTP标头...作为黑客利用主机的另一种选择
xenoterracide 2011年

我四处寻找SO解决方案(TamperData),但是我没有看到如何修改主机。我想知道实时HTTP标头是否真的允许我修改标头,它说它是查看器。
xenoterracide 2011年

我认为在SO中列出的Modify Headers扩展名可以使用...如果您使用Host hostname ...在其中...尚未测试...在使用它破坏站点之外。
xenoterracide 2011年

2

要测试虚拟主机,可以在Firefox中将Apache服务器设置为代理。您输入的名称将转发给Apache。这将中断浏览其他站点的操作,因此请在完成后重新设置代理。


0

对于每隔几周不断更改IP的服务器,我需要ssh,scp等类似的东西(而且我们的IT设置主机有几周的​​延迟)。我使用此服务器的特殊变量来解决它:export FOO='131.227.aaa.bbb然后我可以做,只要它改变,我就可以ssh bar@$FOO更改IP ~/.bashrc...


-2

不幸的是,除了编写自己的Internet浏览器之外,您不能。

如果必须进行一些测试,则需要一台测试机,无论是虚拟机还是真正的测试机,因此都必须询问Unix管理员(或主机提供商)如何放置开发环境。

您还可以在PC上安装VM,安装Linux发行版,Apache并测试您的更改(听起来并不那么困难)

更新资料

为了更好地说明,每个应用程序都是使用标准库编写的,因此,无需再重写底层库和诸如gethostbyname()之类的功能。

这些功能通常设置为使用文件(/ etc / hosts)和DNS,因此,很不幸,如果您需要浏览器将解析一个名称,而不是在/ etc / hosts中设置的名称,则没有太多选择。

  1. 您可以设置自己的DNS服务器,并询问谁拥有root权限来更改/etc/resolve.conf。
  2. 您可以安装像DeleGate这样的代理服务器,并为VirtualHost设置一些规则
  3. 在该客户主机上询问sudo权限
  4. 更改用于测试连接(我想是浏览器)的应用程序的行为,例如https://addons.mozilla.org/en-US/firefox/addon/switchhosts/

4
-1的用词不佳且光顾。我是托管服务提供商,它是我们服务器上该死的客户站点,我需要对其进行测试。我们有一个没有管理员访问权限的网络启动Linux,而且我不相信可以在其上启动VM。
xenoterracide

@xenoterracide没有太多要说的。您真正想要的是不可行的,除非您更改SOCKET的创建方式。
tmow 2011年

1
@xenoterracide顺便说一句,没有任何冒犯的意图。
tmow 2011年

以及托管服务提供商...我实际上拥有“ sudo权限”,每个框上都有真正的root用户,并且可以完全访问所有内容...除了我的台式机(eyeroll)之外,但如果他们还不想更改其名称服务器, ..我
无奈

1
使用LD_PRELOAD,您可以“覆盖”特定的“低级”功能并执行所需的操作,例如。告诉程序您自己的“ / etc / hosts” open()以及任何其他低级调用..,只要涉及动态代码加载(.so)
akira
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.