IP地址的10种表示方法
IP地址的10种写法
大多数精通技术的人都知道 是 的 互联网协议 (IP) 地址,许多精通技术的人都知道 是 的 互联网协议版本 6 (IPv6) 地址。127.0.0.1localhost::1localhost
是表示 IP 地址的唯一方法吗?127.0.0.1::1localhost
不,有无限不同的有效方式来表示它 💥
一个 IP 地址,多种表示方式#
以下是表示 IP 地址的九种主要方式。我们将使用作为示例的主题。您可能希望运行一些服务器侦听以确认我的声明。127.0.0.1127.0.0.1
1. 点分十进制表示法#
我们最熟悉的是点分十进制表示法,它的格式为 ,其中范围可以从 到 。N.N.N.NN0255
在这个符号中,是熟悉的.localhost127.0.0.1
2. 0 优化的点分十进制表示法#
的数字正确格式实际上是 。 是零抑制形式。127.0.0.1127.000.000.001127.0.0.1
零抑制是从数字中排除在数字值中没有意义的数字中的零(左填充的零)。
零压缩是排除其值总和为零的段。
使用零压缩,可以省略 IP 地址的值段。所以变成:0127.0.0.1
127.1
尝试 ping 它作为证据:
$ ping 127.1
PING 127.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.051 ms
同样,变成 .192.168.0.1192.168.1
由于零抑制和零压缩,以下内容也被解释为:127.0.0.1
127.0.00000000000000000000000000000000001
来吧,ping它。
想知道是否也会解决?000127.0.1127.0.0.1
不,将被读取为八进制,等于十进制。所以会解决.000127012787000127.0.187.0.0.1
3. 八进制符号#
点分十进制 IP 地址的每个数字也可以用八进制格式表示。所以在八进制符号中是:127.0.0.1
0177.0.0.01
需要注意的是,数字前的前导是将它们标记为八进制的必要条件。你可以把尽可能多的 s 放在它们前面。因此,以下内容也指:00127.0.0.1
00000000177.000.0.00000001
0177.0.0.0000001
000177.0000.00000.01
0000177.000000000000000000.00000000000.00000000001
00000000000000000000000000000000000000000000000000177.0.0.01
不相信我?
尝试ping它们:
$ ping 00000000000000000000000000000000000000000000000000177.0.0.01
PING 00000000000000000000000000000000000000000000000000177.0.0.01 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.060 ms
基础网络库正在将八进制 IP 地址转换为十进制格式(然后转换为二进制格式)。
4.十六进制表示法#
“如果某物可以用八进制表示,那么它可能也可以用十六进制表示。
是的,你是对的。点分十进制 IP 地址的数字也可以用十六进制格式表示。所以在十六进制表示法中是:127.0.0.1
0x7f.0x0.0x0.0x1
如果在连接的十六进制值前面加上 :0x
0x7f000001
尝试 ping 该操作:
$ ping 0x7f000001
PING 0x7f000001 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.072 ms
而且,您可以使用任意数量的随机十六进制值左填充十六进制值。因此,以下内容也指:127.0.0.1
0xDEADBEEF7f000001
0xBADF00D7f000001
0xDEADC0DE7f000001
0xBADC0DE7f000001
0xBAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7f000001
5. 十进制表示法,又名 dword 表示法#
Dword 是 IP 地址的非点分十进制表示形式。在 dword 表示法中是:127.0.0.1
2130706433
尝试 ping 它:
$ ping 2130706433
PING 2130706433 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.031 ms
6. 二进制表示法#
您一定想知道 IP 地址是否可以用二进制表示法表示;因为它们可以用十进制、八进制和十六进制表示。
你是对的,IP地址也可以用二进制表示。 二进制表示法为:127.0.0.1
01111111000000000000000000000001
但请注意,并非所有 HTTP 客户端都支持二进制格式的 IP 地址。
二进制表示法是 IP 地址的真实形式。它是最低级别的网络组件理解和使用的格式。
7. 混合符号#
混合我们目前所学到的知识怎么样?地址的一个或多个段使用不同的符号?只需保持最左边的部分完好无损即可。以下是一些示例:
00000000000000000000000000000000000000000000000000177.1
0x7f.1
127.0x1
四个部分中的三个在 dec、oct 和 hex 中表示相同,这并没有给我们太多的发挥空间。让我们看看 (google.com) 如何用十进制-八进制-十六进制-dword 混合表示法表示:127.0.0.1172.217.166.174
172.14263982
0254.0xd9a6ae
0xac.000000000000000000331.0246.174
0331.14263982
8. IPv6格式#
然后我们有了IPv6。以下所有内容都解析为:::1
0000000000000:0000:0000:0000:0000:00000000000000:0000:1
0000:0000:0000:0000:0000:0000:0000:0001
0:0:0:0:0:0:0:1
0:0:0:0::0:0:1
还记得零压缩和零抑制吗?
9. URL 编码的 IP 地址#
在大多数浏览器和 HTTP 客户端中,URL 编码的 IP 地址被接受为有效的 IP 地址。因此,以下内容是指:http://127.0.0.1
http://%31%32%37%2E%30%2E%30%2E%31
以下是指:http://[::1]
http://[%3A%3A%31]
解释#
那么,为什么IP地址有多种形式呢?
事实是,IP 地址实际上是 IPv32 中的 4 位数字和 IPv128 中的 6 位数字。二进制表示法是 IP 地址的正确表示。所有其他符号都只是人类与机器标准交互的便利(在不同程度上);所有这些最终都会转换为二进制表示法。
各种数字系统和各种优化约定使拥有无限不同格式的 IP 地址的奇怪现象成为可能。
我知道您正在寻找您刚刚学到的所有符号和组合,这是我编写的在线 IP 地址转换器。它采用点分十进制 IP 地址并将它们转换为八进制、十六进制、二进制和 dword 表示法,玩得开心!
总结#
有效的 IP 地址不一定看起来“有效”。IP 地址可以用完全不同的方式表示,因此无法确定值是否为 IP 地址。如果您有用于检测 IP 地址的正则表达式,则默认情况下会断开该正则表达式。如果此正则表达式用于访问控制,则您的系统上存在漏洞。
您的 IP 地址检测算法今天感觉如何?
- 感谢你赐予我前进的力量