节点覆盖请求IP解析
Posted
技术标签:
【中文标题】节点覆盖请求IP解析【英文标题】:Node override request IP resolution 【发布时间】: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
【问题讨论】:
你知道怎么做吗? 【参考方案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 地址,但尚未始终通过其适当的名称服务器关联。此请求必须指定域名的原因是因为服务器通常会运行多站点设置。以上是关于节点覆盖请求IP解析的主要内容,如果未能解决你的问题,请参考以下文章