V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
novolunt
V2EX  ›  程序员

浏览器中怎么使用二进制表示 ip

  •  
  •   novolunt · 2022-09-19 16:11:16 +08:00 · 2785 次点击
    这是一个创建于 803 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如 1.1.1.1

    • 十六进制

    https://0x01010101

    • 十进制
    16777216 65536  256  1
    https://16843009/
    
    • 八进制

    https://0100200401/

    • 二进制

    0001000000010000000100000001

    19 条回复    2022-09-20 11:57:47 +08:00
    thinkershare
        1
    thinkershare  
       2022-09-19 16:21:45 +08:00
    IP V4 本质上是个整数 byte byte byte byte (4 个字节足够), JavaScript 的 number 默认是 float, 你也可以使用定型的 uint32
    , 这样, 任何一个 IP 都可以使用一个数值表示, 你在格式化输出的时候是要$IP.toString(2).padStart(32,'0') 就好了嘛.
    AoEiuV020CN
        2
    AoEiuV020CN  
       2022-09-19 16:22:41 +08:00
    不理解,你是在开发浏览器还是在拟定浏览器规范?
    novolunt
        3
    novolunt  
    OP
       2022-09-19 16:29:27 +08:00
    @AoEiuV020CN 让 dns 服务器支持数字类型的 dns 解析,从而规避网络工具对域名的嗅探。
    leonshaw
        4
    leonshaw  
       2022-09-19 16:29:45 +08:00
    man inet_aton
    DOLLOR
        5
    DOLLOR  
       2022-09-19 16:32:57 +08:00 via Android
    你是想在地址栏展示二进制表示的 IP ,还是单纯地想让大家帮你实现一个 IP 转二进制的函数?
    又或者是一个 X-Y 问题?
    AoEiuV020CN
        6
    AoEiuV020CN  
       2022-09-19 16:37:50 +08:00   ❤️ 2
    @novolunt #3 更不理解了,
    我不知道你前半句是在做什么,但我不觉得你可以实现后半句,
    villivateur
        7
    villivateur  
       2022-09-19 16:39:45 +08:00
    涨知识了,我才知道原来浏览器地址栏可以直接输 ip 地址的数字形式
    choury
        8
    choury  
       2022-09-19 16:40:13 +08:00   ❤️ 2
    你都有 ip 了,还要用 dns 做什么?
    novolunt
        9
    novolunt  
    OP
       2022-09-19 17:56:38 +08:00
    @choury 因为 ip 是动态的,不固定,业务场景比较特殊
    hanssx
        10
    hanssx  
       2022-09-19 18:15:06 +08:00
    IP 的二进制应该没法表示,另外你都直接访问 IP 了, 已经不会再走域名 DNS 了,想不明白你想解析数字类型 DNS 是啥意思?
    crab
        11
    crab  
       2022-09-19 18:29:25 +08:00
    https://00000001.00000001.00000001.00000001
    MossFox
        12
    MossFox  
       2022-09-19 18:47:59 +08:00
    emm, 如果是想把 IP 加进域名记录、但不希望被嗅探,那得不走 DNS 的 A/AAAA 记录。
    可以看下存 TXT 记录行不行。这个我没测试过缓存和查询成功率影响,另外就是不清楚有没有专门嗅探 TXT 记录的,可能需要稍微加个密之类再存。这想法不清楚靠不靠谱。
    不过这么做的话,想在浏览器里面访问需要在本地额外查出 IP 之后才行。
    novolunt
        13
    novolunt  
    OP
       2022-09-19 22:27:25 +08:00
    @hanssx
    准确的讲是一个 dns 反射代理服务(类似 nip.io 但更复杂),并提供固定的访问入口页面,对 ip 对应的数值进行处理,并保证同类 ip 指向的域名地址唯一。比如:
    访问 http://aaaa(aaaa 是指向 1.1.1 和 1.0.0.1 的编码).nnip.io/ ,最终显示的是 1.1.1.1 的页面。因为连的是后端的代理服务,这样既解决了隐藏原始网站 ip 的目的,又保证 url 端不泄漏原始地址。
    novolunt
        14
    novolunt  
    OP
       2022-09-19 22:32:21 +08:00
    choury
        15
    choury  
       2022-09-19 22:45:54 +08:00   ❤️ 1
    直接范解析就可以了吧,比如*.nnip.io 全部指向 1.1.1.1 ,然后后端服务器拿到 host 字段,然后通过 aaaa 解析到需要的 ip 地址,然后在转发,这样随便你用什么编码方式都行吧
    AoEiuV020CN
        16
    AoEiuV020CN  
       2022-09-19 22:46:14 +08:00 via Android
    @novolunt 建议 0x 代表 16 进制,0 代表 8 进制,0b 代表二进制,

    浏览器地址栏不支持二进制 ip 地址,你这需求完全可以自己定义,不需要管浏览器的标准,
    hxysnail
        17
    hxysnail  
       2022-09-20 08:52:24 +08:00
    @novolunt 只要你在浏览器或者客户端做,理论上就不可能保证 URL 不泄露原始地址。DNS 反射只是解决映射问题,不解决保密问题,别人 DNS 解析一下就知道了。那剩下的思路就只有加密,浏览器是没有这个功能的,假设你有一个客户端。想要解密,你得把解密信息放在客户端吧?这样无论你怎么隐藏,理论上都是可以逆向出来的,时间问题而已。
    dangyuluo
        18
    dangyuluo  
       2022-09-20 10:46:36 +08:00
    看看 unix/linux 下内核是怎么处理 ipv4 地址就理解了

    https://www.gta.ufrj.br/ensino/eel878/sockets/inet_ntoaman.html
    shellus
        19
    shellus  
       2022-09-20 11:57:47 +08:00
    很简单,自己搭建一个转发服务,就可以访问
    https://ip.com/0001000000010000000100000001
    然后后端解析跳转到 http://1.1.1.1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:42 · PVG 07:42 · LAX 15:42 · JFK 18:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.