在浏览器前端 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,只能调第三方接口。
浏览器环境下无解