【问题标题】:Programmatically edit unix host file以编程方式编辑 unix 主机文件
【发布时间】:2018-11-08 22:22:51
【问题描述】:

我目前正在使用主机文件将所有流量重定向到某个外部主机到我的机器,以便我的 (nodejs) 应用程序拦截它。

/etc/hosts: 

127.0.0.1 externalhost.com

我的应用程序接收到所有应该去externalhost.com 的流量,然后决定是否去

a) 将请求转发到原始资源(例如对externalhost.com/target_B 的请求)

b) 拦截请求并发回自定义响应(例如向externalhost.com/target_A 的请求)

但是,原始资源是我在主机文件中定义的主机,因此,创建了一个无限循环。

有没有办法以编程方式禁用主机重定向?由于性能原因,我不想每次都写入该文件。

【问题讨论】:

  • 您的应用是否通过读取 /etc/hosts 来查找原始资源?
  • 不,原始资源取自请求本身(req.hostreq.originalUrl 等)
  • 我无法理解您的设置,也许您可​​以发布/etc/hosts 的相关部分和您的代码。当您只想重定向针对外部服务器的请求时,我不明白为什么您会收到将目标设置为服务器的请求。
  • 当然。这是/etc/hosts的相关部分:127.0.0.1 externalhost.com 我只需要拦截到某个目标路径的请求,比如说“externalhost.com/target_A”。为了能够过滤这个特定的路径,我的应用程序接收到所有应该去 externalhost.com 的流量,然后决定是否 a)将请求转发到原始资源(例如,请求到“externalhost.com/target_B")b)拦截请求并发回自定义响应(例如对“externalhost.com/target_A"”的请求)

标签: node.js unix dns localhost


【解决方案1】:

我认为这种情况下的解决方案是在从您的代码重定向请求时尝试绕过/etc/hosts 文件。

您可以尝试使用内置的dns模块解析外部主机的IP地址,然后使用请求中的IP地址,而不是主机名。

dns.resolve4('externalhost.com', function (err, res) {
  var ip = res[0];
  console.log('IP address of externalhost: ' + res[0])
  request(ip + "/target_A")
})

【讨论】:

  • 不幸的是,这不适用于我的情况,因为访问 IP 提供的结果与访问主机名不同(主机名似乎指向服务器上的单个服务)。好主意,不过。接受它,因为它可能会帮助别人。我想我会为您提供一个外部服务器重定向到原始源的解决方案。
  • 好的,这很奇怪。事实上,这些天使用 IP 可能会出现问题。我很想知道是否有替代方案,如果您找到了可以将其添加为 aswer。
猜你喜欢
  • 2011-03-12
  • 1970-01-01
  • 2017-02-01
  • 2013-09-12
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多