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

2022-09-19 16:11:16 +08:00
 novolunt

例如 1.1.1.1

https://0x01010101

16777216 65536  256  1
https://16843009/

https://0100200401/

0001000000010000000100000001

2641 次点击
所在节点    程序员
19 条回复
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
2022-09-19 16:22:41 +08:00
不理解,你是在开发浏览器还是在拟定浏览器规范?
novolunt
2022-09-19 16:29:27 +08:00
@AoEiuV020CN 让 dns 服务器支持数字类型的 dns 解析,从而规避网络工具对域名的嗅探。
leonshaw
2022-09-19 16:29:45 +08:00
man inet_aton
DOLLOR
2022-09-19 16:32:57 +08:00
你是想在地址栏展示二进制表示的 IP ,还是单纯地想让大家帮你实现一个 IP 转二进制的函数?
又或者是一个 X-Y 问题?
AoEiuV020CN
2022-09-19 16:37:50 +08:00
@novolunt #3 更不理解了,
我不知道你前半句是在做什么,但我不觉得你可以实现后半句,
villivateur
2022-09-19 16:39:45 +08:00
涨知识了,我才知道原来浏览器地址栏可以直接输 ip 地址的数字形式
choury
2022-09-19 16:40:13 +08:00
你都有 ip 了,还要用 dns 做什么?
novolunt
2022-09-19 17:56:38 +08:00
@choury 因为 ip 是动态的,不固定,业务场景比较特殊
hanssx
2022-09-19 18:15:06 +08:00
IP 的二进制应该没法表示,另外你都直接访问 IP 了, 已经不会再走域名 DNS 了,想不明白你想解析数字类型 DNS 是啥意思?
crab
2022-09-19 18:29:25 +08:00
https://00000001.00000001.00000001.00000001
MossFox
2022-09-19 18:47:59 +08:00
emm, 如果是想把 IP 加进域名记录、但不希望被嗅探,那得不走 DNS 的 A/AAAA 记录。
可以看下存 TXT 记录行不行。这个我没测试过缓存和查询成功率影响,另外就是不清楚有没有专门嗅探 TXT 记录的,可能需要稍微加个密之类再存。这想法不清楚靠不靠谱。
不过这么做的话,想在浏览器里面访问需要在本地额外查出 IP 之后才行。
novolunt
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
2022-09-19 22:32:21 +08:00
choury
2022-09-19 22:45:54 +08:00
直接范解析就可以了吧,比如*.nnip.io 全部指向 1.1.1.1 ,然后后端服务器拿到 host 字段,然后通过 aaaa 解析到需要的 ip 地址,然后在转发,这样随便你用什么编码方式都行吧
AoEiuV020CN
2022-09-19 22:46:14 +08:00
@novolunt 建议 0x 代表 16 进制,0 代表 8 进制,0b 代表二进制,

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

https://www.gta.ufrj.br/ensino/eel878/sockets/inet_ntoaman.html
shellus
2022-09-20 11:57:47 +08:00
很简单,自己搭建一个转发服务,就可以访问
https://ip.com/0001000000010000000100000001
然后后端解析跳转到 http://1.1.1.1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX