V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
gakuen
V2EX  ›  JavaScript

JS 在不使用 API 的情况下,有办法获取域名对应 IP 吗?

  •  
  •   gakuen · 2020-08-18 17:28:42 +08:00 · 5048 次点击
    这是一个创建于 1559 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    27 条回复    2020-08-28 00:06:13 +08:00
    maocat
        1
    maocat  
       2020-08-18 17:34:04 +08:00
    让后端在响应头加上 ip
    gakuen
        2
    gakuen  
    OP
       2020-08-18 17:37:25 +08:00
    @maocat 假设我要获取不定的域名 IP,后端不可控的情况下。
    w3cfed
        3
    w3cfed  
       2020-08-18 17:42:58 +08:00
    @gakuen Node.js
    whypool
        4
    whypool  
       2020-08-18 17:56:41 +08:00
    不能
    mokeyjay
        5
    mokeyjay  
       2020-08-18 18:00:29 +08:00
    原生 JS 不行
    如果是浏览器扩展的话,那可以,毕竟扩展可以跨域
    maichael
        6
    maichael  
       2020-08-18 18:05:15 +08:00
    你调后端,让后端去调 DNS 不就好了。
    ik
        7
    ik  
       2020-08-18 18:09:45 +08:00 via iPhone
    需求是: 从前端直接获取到访问的 cdn 节点 ip?
    gakuen
        8
    gakuen  
    OP
       2020-08-18 18:12:10 +08:00
    @maichael 就是不希望调用 API 或后端
    gakuen
        9
    gakuen  
    OP
       2020-08-18 18:13:06 +08:00
    @ik 是,大概就能获取 ping 或 nslookup 那样的结果就行,不需要真实 IP
    shenyu1996
        10
    shenyu1996  
       2020-08-18 18:13:38 +08:00
    不能吧 js 在客户端运行,要获取服务器信息 理论上不行
    maichael
        11
    maichael  
       2020-08-18 18:21:11 +08:00
    @gakuen 浏览器环境下做不到
    masker
        12
    masker  
       2020-08-18 18:33:52 +08:00 via Android
    术业有专攻。 请用相应的工具做相应的事。
    再者,请 Google 。
    vicsun2020
        13
    vicsun2020  
       2020-08-18 18:50:51 +08:00 via iPhone
    不请求无解啊,至少需要问 dns 吧
    falcon05
        14
    falcon05  
       2020-08-18 18:53:02 +08:00 via iPhone
    不能
    wunonglin
        15
    wunonglin  
       2020-08-18 19:02:57 +08:00
    用 DNS over HTTPs 就行

    ```js
    await fetch('https://dns.alidns.com/resolve?name=www.taobao.com.&type=1')
    ```
    zsdroid
        16
    zsdroid  
       2020-08-18 19:06:11 +08:00
    你以为 js 是万能的?
    sunjourney
        17
    sunjourney  
       2020-08-18 21:36:25 +08:00
    为什么后端不可控,就是要让后端可控啊
    JustSong
        18
    JustSong  
       2020-08-18 22:19:02 +08:00 via Android
    你还是直接说你要拿来干嘛吧
    chinvo
        20
    chinvo  
       2020-08-18 22:32:06 +08:00 via iPhone
    如果要知道后端去了哪个 CDN 节点,建议在 CDN 上返回 via 头
    cydian
        21
    cydian  
       2020-08-19 00:00:36 +08:00   ❤️ 1
    @wunonglin 这样还是通过阿里的服务器获取 IP 了
    楼主想要获取本机解析的 IP,对于同一域名不同地域解析不同的 IP 的时候,这个方法就不行。

    回答楼主问题:
    1.不改变后端,不改变浏览器安全设置,不使用扩展,答案:不能
    2.后端或者 CDN 头部配合,头部添加响应 IP,即可拿到本机解析的 IP
    3.使用 15 楼的方案,无需改变后端,但同一域名解析多个 IP 无解
    4.使用浏览器扩展,用户上手难,不建议,但使用浏览器扩展可玩性极高
    cydian
        22
    cydian  
       2020-08-19 00:04:14 +08:00
    19 楼的方案
    dns.resolve() 兼容性问题
    lein
        23
    lein  
       2020-08-19 10:41:57 +08:00   ❤️ 1
    需要更底层的协议和接口,JS 里面的 XMLHttpRequest 肯定是不行了,试试去 WebRTC 里面找找能不能有解决方案。
    tydl
        24
    tydl  
       2020-08-19 14:54:13 +08:00
    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script type="text/javascript">
    document.write(returnCitySN["cip"]+','+returnCitySN["cname"])
    </script>
    tydl
        25
    tydl  
       2020-08-19 14:55:44 +08:00
    @tydl 这是使用接口 api 了吧?
    shenyuzhi
        26
    shenyuzhi  
       2020-08-19 21:47:01 +08:00 via iPhone
    浏览器没有给 js 提供这种 api,只能调第三方接口。
    u823tg
        27
    u823tg  
       2020-08-28 00:06:13 +08:00
    浏览器环境下无解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1892 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.