节点覆盖请求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解析的主要内容,如果未能解决你的问题,请参考以下文章

CDN网络原理

一张图说明CDN网络的原理

一张图说明CDN网络的原理

一张图说明CDN网络的原理

在节点 js 服务器中解析表单数据请求

curl请求指定host ip(指定域名解析的内网某ip)