AI摘要
小轻了解到,我的主人在文章中揭示了纯数字网址16843009的秘密。原来,它就是IP地址1.1.1.1的十进制整数形式。当访问这个数字网址时,会被重定向到Cloudflare的one.one.one.one服务页面。这是因为IPv4地址本质上是32位数字,点分十进制只是方便记忆的表示法。文章还介绍了IPv4地址的其他写法。
https://www.qingfengnb.cn这是一个很平常的一个域名,大家应该没什么意见吧,但:http://16843009,他也是一个域名,你是不是很震惊?这串数字,既没点,也没字母,看着就像个普普通通的整数。怎么会是一个网址呢?
不过既然说到了,就试着在浏览器的地址栏里敲进去,按下回车。嘿,页面还真打开了,干干净净的一个页面,上面写着“1.1.1.1”几个大字。再看地址栏,已经变成了https://one.one.one.one/。原来是被跳转到了这个域名上。后来才知道,这是Cloudflare公司提供的一个公共DNS服务的页面。这家公司去年还因为一次故障,导致好多网站打不开,算是出了名。
为了搞清楚到底发生了什么,我用了curl命令看了看。在终端里输入:
curl -i https://16843009
返回的结果里,有一行特别关键:
location: https://one.one.one.one/
意思很清楚:服务器告诉浏览器,你要找的地址其实在这儿,请跳过去吧。所以访问那个数字网址,实际上是被引导到了one.one.one.one。
那么这个one.one.one.one又是什么?它是个域名,域名的背后是IP地址。一查,它对应的IP就是1.1.1.1,网页上也直接显示着。这么一来,问题就变成了:16843009和1.1.1.1之间有什么关系?
其实IP地址(IPv4)本质上就是一个32位的数字。平时看到的像1.1.1.1这样的点分十进制,只是为了让人好记好写。它有一个换算公式:把四个数字分别乘以256的立方、256的平方、256的一次方和256的零次方,再加起来。拿1.1.1.1来算:
1×256³ + 1×256² + 1×256 + 1 = 1×16777216 + 1×65536 + 1×256 + 1 = 16777216 + 65536 + 256 + 1 = 16843009
结果正好就是那个数字。所以说,16843009和1.1.1.1,其实是同一个地址的两种不同写法。在浏览器里输入https://16843009,就相当于输入https://1.1.1.1。而Cloudflare恰好就在1.1.1.1上挂了一个Web服务,并且把所有请求都重定向到了one.one.one.one这个更像个域名的地址上。
这事儿还没完。IPv4地址的写法,其实远不止点分十进制这一种。在早期的网络实现里,还有好几种表示方式。比如直接用32位整数,就像16843009这样;或者写成十六进制0x01010101;或者用八进制,写成001.001.001.001;还有两段式的点分十进制,比如1.65793,这里的65793就等于1×256² + 1×256 + 1;三段式的像1.1.257,257就是1×256 + 1。这些写法现在很少用了,但在技术底层,它们仍然是有效的。这让人想起孔乙己说茴香豆的“茴”字有四种写法,虽然用不上,但确实存在过。
如果想自己动手试试,其实也不复杂。假设有一台服务器,公网IP是1.1.1.1(当然这个IP是Cloudflare的,一般人用不了),只需要在服务器上装个Nginx或者Apache,配置好监听1.1.1.1:443(HTTPS需要证书),然后在配置里写一条重定向规则。比如在Nginx里,可以这样:
server {
listen 1.1.1.1:443 ssl;
server_name 16843009; # 匹配Host为16843009的请求
return 301 https://one.one.one.one$request_uri;
}
如果想让所有访问1.1.1.1的请求都跳转,也可以不指定server_name,直接监听IP即可。当然,还需要配置SSL证书,让浏览器能建立安全的连接。Cloudflare用的证书自然是有效的,所以访问https://16843009不会报安全警告。
现在再回头看,那个数字串其实就是1.1.1.1的另一种身份证。
最后,大家知道http://2130706433,要是输进浏览器,会打开哪个网站?有兴趣的话,不妨自己试试看。