【问题标题】:Node override request IP resolution节点覆盖请求IP解析
【发布时间】:2016-05-03 17:47:56
【问题描述】:

我正在努力寻找正确的术语来准确表达这个问题,但我会尽力而为:

在node.js中,有没有办法在发出HTTP请求时手动覆盖IP地址(例如请求some-domain.com/whatever而不是通过DNS解析IP地址,手动提供一些IP地址1.2.3.4)?

这实际上相当于在/etc/hosts 中设置1.2.3.4 some-domain.com

【问题讨论】:

  • 你知道怎么做吗?

标签: node.js http dns request ip


【解决方案1】:

Node 的 http 和 https 模块将代理作为参数,您可以使用 lookup parameter 覆盖 dns 解析器。

const http = require("http");
const https = require("https");


const staticLookup = (ip, v) => (hostname, opts, cb) => cb(null, ip, v || 4)
const staticDnsAgent = (scheme, ip) => new require(scheme).Agent({lookup: staticLookup(ip)})

http.get("http://some-domain.com/whatever", {agent: staticDnsAgent('http', '1.2.3.4')})

【讨论】:

  • 这太棒了。谢谢你。不知道为什么这个解决方案没有得到更多的支持。
  • 谢谢!我猜是因为我在 3 年后发布了它,但是是的,我看到了其他答案,并且确信一定有更好的方法。
【解决方案2】:

有一个微型模块可以做到这一点:evil-dns

evilDns.add('foo.com', '1.2.3.4');

【讨论】:

    【解决方案3】:

    我建议在 DNS API (https://nodejs.org/api/dns.html) 上查看 Nodejs 的文档。您可以修改操作系统主机文件并使用 dns.lookup() 从主机文件中提取而不执行 DNS 查询。

    不确定您是否试图避免修改主机文件?

    【讨论】:

    • 是的,我宁愿不必修改主机文件(这将节省大量的复杂性)
    • 你能再解释一下用例吗?这是否适用于您要设置静态 IP 等的少量主机名?
    • 它用于通过对 PHP 脚本的 HTTP 请求的一些远程自动化过程,其中指定了域和 IP 地址,但尚未始终通过其适当的名称服务器关联。此请求必须指定域名的原因是因为服务器通常会运行多站点设置。
    猜你喜欢
    • 2011-01-03
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2019-03-07
    • 2019-01-14
    • 1970-01-01
    • 2014-05-31
    相关资源
    最近更新 更多