使用JavaScript执行DNS查找以将主机名解析为IP地址

13

能否使用JavaScript解析主机名?

以下是假设代码:

var hostname = "www.yahoo.com";
var ipAddress = DnsLookup(hostname);
console.log(ipAddress);

我正在寻找那个神奇的DnsLookup()函数。 :-)


@PatrikAlienus:你没有理解问题。正如x-nl所说,你的评论是“胡说八道”。 - Dan Dascalescu
@DanDascalescu 我猜我引用的那个问题是错误的。它有一个勾选标记和277个赞... - InanisAtheos
2
@PatrikAlienus:OP想要将任意主机名解析为IP。您提供的答案仅从window.location获取当前页面的主机名,并没有尝试解析它。 - Dan Dascalescu
我会说这个问题几乎是 https://dev59.com/hGw05IYBdhLWcg3wpTYV 的重复,尽管你没有说明是否在使用客户端脚本或像 NodeJS 这样的服务器端代码。 - Simon East
4个回答

4

虽然 JavaScript 没有标准的 DNS 功能,但是您可以调用第三方公共 API 来进行 DNS 解析。

例如,Encloud 提供了这样的 API,您可以通过 XMLHttpRequest 进行调用:

var oReq = new XMLHttpRequest();
oReq.onload = function () {
  var response = JSON.parse(this.responseText);
  alert(JSON.stringify(response.dns_entries));
}  
oReq.open("get", "https://www.enclout.com/api/v1/dns/show.json?auth_token=rN4oqCyJz9v2RRNnQqkx&url=stackoverflow.com", true);
oReq.send();

当然,你需要获取自己的认证令牌。免费的Enclout账户每分钟只能进行6个请求。

如果你只想要IP地址,请使用GET请求获取http://api.konvert.me/forward-dns/yourdomain.com


4
这将解析Enclout服务器上的主机名,而不是JavaScript运行的计算机上的主机名。因此,得到的IP地址可能会有所不同。 - Arthur

4

有一个相对较新的(2018年)互联网标准称为DNS over HTTPS(也称为DoH),它已经开始流行。它允许您通过HTTPS将wireformat DNS查询发送到“DoH服务器”。好处是,使用DoH,您可以在HTTPS之上获得整个DNS协议。这意味着您可以获取很多有用的信息。

话虽如此,在浏览器中进行DNS查找非常容易,因为有一个名为dohjs的开源JavaScript库。以下是一个快速示例代码片段:

const resolver = new doh.DohResolver('https://1.1.1.1/dns-query')
resolver.query('www.yahoo.com')
  .then(console.log)
  .catch(console.error);

完全透明:我是dohjs的贡献者。

cURL的DNS over HTTPS维基页面上有很多资源,包括公共DoH服务器列表和DoH工具列表(主要是服务器和客户端软件)。


0

您需要回调到服务器端并从那里解析该值。Javascript 中没有标准的 DNS 查找功能。


-3

不行 - JavaScript 被阻止进行跨域请求。可能有一些黑客技巧可以帮助你(this 这个看起来很有前途),但默认情况下你不能这样做。

你可能能够请求某些内容并确保你收到 HTTP 200 响应。


引用的库将如何帮助Amir获取主机的IP地址?跨域请求与此无关 - 前端无法解析主机! - Vladimir
此答案无效。请参见:https://dev59.com/snM_5IYBdhLWcg3wdy5g#17336519 - InanisAtheos
2
@PatrikAlienus 胡说八道 - nl-x
1
现在已经是2015年了,因为CORS得到了广泛支持,所以这个说法不再正确。 - Simon East
3
@PatrikAlienus您发的链接与这个问题无关,讨论的是完全不同的问题。 - Simon East

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接