冷知识:IP 地址的 N 种写法

接手了一个公众号,每个月有一些文章篇数的需求。摘录一二自觉质量尚好者,存档于此。

「读过书,……我便考你一考。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 地址的三条表示规则,就能组合出所有的情况:

  1. 可以每一个字节均分段,也可以均不分段。
  2. 数字可以使用八、十、十六进制。
  3. 分段时,每段进制可以不同。
  4. 分段时,中间的段可以省略。

下面将介绍点分十进制以外的各种形式。

点分十六进制

点分十六进制,就是将点分十进制中每一段的数字变为十六进制。

例如: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.0192.168.255.255 的地址,那么很不幸,别人只需要输入 0xC0.0xA8.0x00.0x01 就能访问到你的路由器了。

当你了解了 IP 地址的这些形式,便能够想到简单屏蔽规则的无数漏洞:0xC0.0xA8.0x00.0x01192.168.0.10xC0.0250.1 也是。知道各种形式千变万化之后,你就可能会 ~~自闭~~ 换用更高级的屏蔽方式了。如果因为不知道而导致安全隐患,程序员实在是难辞其咎。

正因如此,了解 IP 地址的罕见形式除了好玩之外,并非毫无用处。更多有趣又有用的小知识,敬请关注我们的「冷知识」频道。

我们是电子科技大学百度校园菁英俱乐部。

如果你有兴趣与我们一起学习、分享知识,或与我们一起出去见见外面的世界,欢迎加入我们!

请实时关注我们的动态,同时也可以在公众号内留言。

评论已关闭