技术解析

JS 在不使用 API 的情况下,有办法获取域名对应 IP 吗?
0
1975-03-01 15:13:03
idczone

在浏览器前端 JS,不使用 API 情况下,有没有办法获取域名解析的 IP 。

或者有没有什么浏览器插件可以?而且能在页面里调用的。


让后端在响应头加上 ip

假设我要获取不定的域名 IP,后端不可控的情况下。

Node.js

不能

原生 JS 不行
如果是浏览器扩展的话,那可以,毕竟扩展可以跨域

你调后端,让后端去调 DNS 不就好了。

需求是: 从前端直接获取到访问的 cdn 节点 ip?

就是不希望调用 API 或后端

是,大概就能获取 ping 或 nslookup 那样的结果就行,不需要真实 IP

不能吧 js 在客户端运行,要获取服务器信息 理论上不行

浏览器环境下做不到

术业有专攻。 请用相应的工具做相应的事。
再者,请 Google 。

不请求无解啊,至少需要问 dns 吧

不能

用 DNS over HTTPs 就行
```js
await fetch('https://dns.alidns.com/resolve?name=www.taobao.com.&type=1')
```

你以为 js 是万能的?

为什么后端不可控,就是要让后端可控啊

你还是直接说你要拿来干嘛吧

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve
https://stackoverflow.com/questions/102605/can-i-perform-a-dns-lookup-hostname-to-ip-address-using-client-side-javascript

如果要知道后端去了哪个 CDN 节点,建议在 CDN 上返回 via 头

这样还是通过阿里的服务器获取 IP 了
楼主想要获取本机解析的 IP,对于同一域名不同地域解析不同的 IP 的时候,这个方法就不行。
回答楼主问题:
1.不改变后端,不改变浏览器安全设置,不使用扩展,答案:不能
2.后端或者 CDN 头部配合,头部添加响应 IP,即可拿到本机解析的 IP
3.使用 15 楼的方案,无需改变后端,但同一域名解析多个 IP 无解
4.使用浏览器扩展,用户上手难,不建议,但使用浏览器扩展可玩性极高

19 楼的方案
dns.resolve() 兼容性问题

需要更底层的协议和接口,JS 里面的 XMLHttpRequest 肯定是不行了,试试去 WebRTC 里面找找能不能有解决方案。




这是使用接口 api 了吧?

浏览器没有给 js 提供这种 api,只能调第三方接口。

浏览器环境下无解

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服