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


89

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

714687644714805805209715128610715964400(在前面粘贴一个HTTP://)

这是如何运作的?我在Internet上找到的所有十进制-> IPv4转换器都将其视为无效输入。如果我获取实际加载的IPv4地址,并执行相同的计算将其转换为无点十进制,则得到的数字要小得多。

我读过ping可以接受dword并进行一些转换,但是它不能将此数字转换为IP地址。IPv6的是出了问题,因为这主机没有IPv6连接。

这是什么疯狂?它困扰着我自己和我的同事们。

编辑:现在回到在线。



2
真的确定这不是IPv6地址吗?因为该数字在65536的基数中分解为8位数字;IPv6地址的基数为65536,由8位数字组成。与IPv6一样,以十六进制表示,即89:a4d2:471b:45ef:77ed:c70f:da35:93f0。
Christian

2
@Christian他对数字来源的解释与显示的实际数字有关,该数字有36位数字(每个ID为714xxxxxx或715xxxxxx的9位数字)。该计算机甚至没有IPv6,并且作为IPv4地址的数字确实返回了网页。从〜5E33到〜3E38的数字的基数为65536,我认为这是一个巧合,因为他处于该范围内(加上,任何较小的数字也将是有效的IPv6地址)
Tim S.

1
@beeks好吧,当我昨天尝试时它已经不起作用了,但是考虑到它是一个不安全的路由器,也许这并不奇怪。那么,您是说基本上是在地址栏中输入一个随机数吗?或者,您在那里拥有什么样的电子表格,其中包含不安全路由器的奇怪编码的IP地址?;)
基督教徒

1
@克里斯蒂安,哈哈。它们是合规性系统中的一些唯一消息标识符。我完全有机会将它们粘贴到地址栏中,而且效果很好。我敢打赌,这辈子再也不会发生了:)
beeks 2014年

Answers:


93

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

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

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

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

查看Teredo规范(请参阅4. Teredo Addresses),客户端IPv4占用IPv6地址的最后32位,但是数字的前缀与Teredo规范不匹配(另请参见Wikipedia)。


12
好答案。可能还需要提及的是,点分IPv4地址的每个部分都称为八位字节,因为它是8位二进制数的十进制表示(4个八位字节= 4 x 8位= IPv4地址的32位),而十进制版本实际上仅是为了我们的利益。
chritohnide

4
您确定它不是IPv6十进制表示法吗?它成功转换为0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata 2014年

5
@Izkata:不太可能因为该地址位于IPv6地址空间的未分配和保留部分中。
Henning Makholm 2014年

3
该数字(以ASCII形式)可能仅通过C stdlib字符串之一运行以将int函数转换为32位ipv4地址。在C stdlib的大多数实现中,这些转换将自动进行模2 ^ <所需整数大小>。在这种情况下,结果完全符合观察到的行为。
Tonny 2014年

3
值得注意的是,这可能与Firefox的URL解析器有关。似乎认识到它是一个数字,而不是URL,并尝试将其解析为32位不带点的IP地址(生成的解析后的整数最终以32位为模,并且它实际上不对输入进行任何错误检查)。例如,Chrome不会显示此行为。实际上,可能值得将其报告为Firefox中的一个小错误。
杰森C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.