接手了一个公众号,每个月有一些文章篇数的需求。摘录一二自觉质量尚好者,存档于此。
「读过书,……我便考你一考。IP 地址的 IP,怎样写的?」
下文所述,如无特别说明,均为 IPv4。
目录
我们所熟悉的 IP 地址
IP 地址,即分配给所有使用 IP 协议的设备的网络地址。无论是要访问某个网站,还是连接到某一台服务器,你都需要 IP 地址;即使你使用的是域名,电脑也会将其转化为 IP 地址之后再进行连接。
问到 IP 地址是怎么写的,即使你没学过计算机网络,答案大概也能信手拈来:十进制点分式,形如 127.0.0.1
。但你可知道,IPv4 地址的表示方法能有至少六种之多?
究 IP 地址的本质,其实只是一串32位长的二进制串。而便于人类记忆与使用,形如 8.8.8.8
的点分十进制是 IP 地址最为常见的表达形式。从二进制到这一常见格式的转化方式十分简单:32 位二进制串,按每 8 位(一个字节)分成四组,每组转化为十进制,再用点分开。也正因如此,这一表现形式中,每一段的范围都是 0~255(2 的 8 次方减一)。
而实际上,IP 地址是可以不分段的,也可以表达为任何一种数字形式。这些方式并不常见,但电脑的确支持,如果忘记,有时会导致一些意想不到的后果。
IP 地址的隐藏形式
其实只要记住 IP 地址的三条表示规则,就能组合出所有的情况:
- 可以每一个字节均分段,也可以均不分段。
- 数字可以使用八、十、十六进制。
- 分段时,每段进制可以不同。
- 分段时,中间的段可以省略。
下面将介绍点分十进制以外的各种形式。
点分十六进制
点分十六进制,就是将点分十进制中每一段的数字变为十六进制。
例如:192.0.2.235
,转换过来就是 0xC0.0x00.0x02.0xEB
,其中分别对应每段的十六进制数。其中每段都有标准的十六进制前缀 0x
。
点分八进制
点分八进制,就是将点分十进制中每一段的数字变为八进制。
例如:192.0.2.235
,转换过来就是 0300.0000.0002.0353
,其中分别对应每段的八进制数。其中每段都有标准的八进制前缀 0
。
十进制
当不使用点分的时候,就是直接将 IP 地址整个 32 位的二进制串转换为十进制数。
例如:192.0.2.235
,转换过来就是 3221226219
,就是将原地址中每一段转换为二进制数、拼在一起,然后一起转换为十进制数字而成。
十六进制
十六进制就是直接将 IP 地址整个 32 位的二进制串转换为十六进制数。
例如:192.0.2.235
,转换过来就是 0xC00002EB
,转化方法如十进制,前面有标准的十六进制前缀 0x
。
八进制
八进制就是直接将 IP 地址整个 32 位的二进制串转换为八进制数。
例如:192.0.2.235
,转换过来就是 030000001353
,转化方法如十进制,前面有标准的八进制前缀 0
。
点分自由组合
在使用点分格式时,各段的进制是可以自由组合的。例如 192.0.2.235
可以表示为 192.0x00.0002.235
,也是完全合法的。
点分省略
在使用点分格式是,处于中间的 0 段是可以省略的。填充的顺序是一四二三,例如 127.1
表示的是 127.0.0.1
,而 127.1.1
就是 127.1.0.1
了。
当然,省略的同时也能自由组合进制,因而 127.0.0.1
也可以变形为 0x7f.1
了。
纵览
所以一个 IP 能有哪些形式呢?以下表格展现了 Cloudflare 的 DNS 服务器官网的地址的各种形式,任何地址都能直接复制到浏览器中打开。
形式 | 地址 |
---|---|
点分十进制 | https://1.1.1.1 |
点分十六进制 | https://0x01.0x01.0x01.0x01 |
点分八进制 | https://01.01.01.01 |
十进制 | https://16843009 |
十六进制 | https://0x1010101 |
八进制 | https://100200401 |
点分自由组合 | https://1.0×01.01.1 |
屠龙之术?
IP 地址的 n 种写法,是否只是屠龙之术?我们或许一辈子也用不到这些奇奇怪怪的表达方式,知道又有什么用呢?但对于程序员而言,知道这些知识确实有用,有时会关乎你所写程序的安全。
试想这样的一种情况:你做了一个可以代理网站的软件,可以代理你所输入的网址。但你不想别人通过这个软件访问到你内网中的地址(比如你的路由器 192.168.0.1
)。你会怎样写屏蔽规则呢?假如你不知道 IP 地址的诸多形式,只是纯粹地写了屏蔽形如 192.168.0.0
到 192.168.255.255
的地址,那么很不幸,别人只需要输入 0xC0.0xA8.0x00.0x01
就能访问到你的路由器了。
当你了解了 IP 地址的这些形式,便能够想到简单屏蔽规则的无数漏洞:0xC0.0xA8.0x00.0x01
是 192.168.0.1
,0xC0.0250.1
也是。知道各种形式千变万化之后,你就可能会 ~~自闭~~ 换用更高级的屏蔽方式了。如果因为不知道而导致安全隐患,程序员实在是难辞其咎。
正因如此,了解 IP 地址的罕见形式除了好玩之外,并非毫无用处。更多有趣又有用的小知识,敬请关注我们的「冷知识」频道。
我们是电子科技大学百度校园菁英俱乐部。
如果你有兴趣与我们一起学习、分享知识,或与我们一起出去见见外面的世界,欢迎加入我们!
请实时关注我们的动态,同时也可以在公众号内留言。