JS 在不使用 API 的情况下,有办法获取域名对应 IP 吗? - V2EX
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 5580 次点击
    这是一个创建于 1883 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在浏览器前端 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 吧
    GG668v26Fd55CP5W
        14
    GG668v26Fd55CP5W  
       2020-08-18 18:53:02 +08:00 via iPhone
    不能
    shakaraka
        15
    shakaraka  
    PRO
       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     Solana     4561 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 04:05 PVG 12:05 LAX 21:05 JFK 00:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86