奇怪的无点十进制 IP 地址表示法...它是如何工作的?

奇怪的无点十进制 IP 地址表示法...它是如何工作的?

今天早些时候,我以为剪贴板里有一个 URL,但实际上我从电子表格中复制了四个 9 位整数,它们是专有系统的识别号。与手头的任务完全无关。我将其粘贴到 Firefox 中,惊讶地发现它实际上加载了一个页面。我见过无点十进制表示法IPv4地址,但这个长数字要大得多。

714687644714805209715128610715964400(在前面加上 HTTP://)

这是如何工作的?我在互联网上找到的所有十进制 -> IPv4 转换器都认为这是无效输入。如果我获取它实际加载的 IPv4 地址,并执行相同的计算将其转换为无点十进制,我会得到一个非常小的数字。

我读过可以接受双字并进行一些转换,但不能将该数字转换为 IP 地址。IPv6是不可能的,因为该主机没有 IPv6 连接。

这是什么疯狂的事?我和我的同事们都困惑不已。

编辑:现在已重新上线。

答案1

这是一个非常有趣的问题,我花了一点时间才弄清楚。简短的回答是,数字的最后 32 位是3660944368(以十进制表示,可通过 找到714687644714805209715128610715964400 mod 2^32

这是 IPv4 地址的十进制值218.53.147.240,可以通过将其转换为 256 进制数来找到,3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240类似于以十进制写出数字。例如234 = 2*10^2+ 3*10 + 4

正如 @chritohnide 指出的那样,每个点分式 IPv4 地址部分称为一个八位字节,因为它代表 8 个二进制数字。还值得注意的是,IPv4 地址的各种格式(例如点分十进制或纯十进制)只是为了方便我们表示 32 位二进制数的不同方式。

由于 IPv4 地址是 32 位数字,因此仅使用数字的最后 32 位来解析地址。为什么会这样并不那么明显。正如其他人指出的那样,完整的数字看起来与十进制的 IPv6 地址非常相似,但不是一个有效的地址。

看看Teredo 规范(看4. Teredo 地址),客户端 IPv4 占用 IPv6 地址的最后 32 位,但数字的前缀不符合 Teredo 规范(另见维基百科)。

相关内容