日志里出现一个十进制大数,配置文档里却写着带点的 IP,核对时容易把“同一个地址的不同表示”当成了不同地址。IPv4 地址转换器能把点分十进制地址同时显示为整数、十六进制、二进制和 IPv6 映射形式,适合做这种格式对照。

本篇使用文档保留地址 192.0.2.10 实际操作。示例只用于演示表示方式,不做连通性测试,也没有给服务器增加 IPv6 地址。

输入带点的 IPv4,结果自动更新

进入「网络工具 → IPv4 地址转换器」,在「IPv4 地址」框输入:

192.0.2.10

当前页面输入后会实时刷新下面的结果。本次十进制为 3221225994,十六进制为 C000020A,二进制为:

11000000.00000000.00000010.00001010
输入 192.0.2.10 后,核对十进制、十六进制与四段二进制结果
输入 192.0.2.10 后,核对十进制、十六进制与四段二进制结果

四段 IPv4 各占 8 位,共 32 位。转成整数时,可以把它看成四个字节按从高到低的顺序组合:

192 × 256^3 + 0 × 256^2 + 2 × 256 + 10
= 3221225994

二进制结果保留了每段前导零,例如十进制的 2 显示为 00000010。这些零没有增加地址长度,只是补足一个字节。十六进制中每两个字符对应一段,C0、00、02、0A 分别对应原来的四个数字。

复制结果给程序使用前,要看清对方要求哪种格式:十六进制是否要加 0x、是否要求固定 8 位、整数是否按无符号 32 位处理。页面给出的字符串不能替代接口自身的字段定义。

用上下界检查整数范围

把输入改为 0.0.0.0,本次十进制和十六进制都显示为 0,二进制则仍按四段各 8 位展示。

0.0.0.0 转换为整数 0,十六进制结果没有补足八位前导零
0.0.0.0 转换为整数 0,十六进制结果没有补足八位前导零

这也说明当前十六进制输出不保证固定为 8 个字符。如果程序要求八位格式,应在接收端按要求补零;不要因为页面只显示一个 0,就认为结果缺了几个字节。

再输入 255.255.255.255,十进制为 4294967295,十六进制为 FFFFFFFF,32 个二进制位均为 1。

255.255.255.255 对应无符号 32 位整数上界 4294967295
255.255.255.255 对应无符号 32 位整数上界 4294967295

这两个输入用于检查数值范围,不是建议拿来配置普通主机。IPv4 的无符号整数范围是 0 到 4294967295。如果数据库或代码使用有符号 32 位整数,较大的地址值可能被解释成负数;排查这种差异时,应核对存储类型和字节顺序,再决定怎样转换。

IPv6 映射只是表示,不证明 IPv6 能访问

回到 192.0.2.10,本次页面还给出:

IPv6 映射:0000:0000:0000:0000:0000:ffff:c000:020a
IPv6 短格式:::ffff:c000:020a

两行表示的是同一个 IPv4 映射地址。c000:020a 中的最后 32 位仍对应原来的 IPv4;:: 压缩了前面的连续零组。

这样的表示常用于把 IPv4 节点地址放进 IPv6 地址结构中。它不会给目标主机分配可路由的原生 IPv6,也不会自动创建 AAAA 解析、开放监听或打通网络。看到映射结果,不能写成“已支持 IPv6”。如果要确认网站的 IPv6 访问情况,需要另行检测真实 IPv6 入口和服务响应。

这个输入框不能反向输入整数

本次把 3221225994 直接放回输入框,页面提示“IPv4 地址格式不正确”,没有完成整数到点分地址的反向转换。因此,按当前页面的实际输入能力,应先准备四段点分十进制 IPv4;不要仅凭工具名称就假定支持所有方向互转。

四段中每段应在 0–255 范围内,192.0.2.256 本次也触发了格式提示。复制日志时应去掉协议、端口、CIDR 前缀和说明文字,保留纯地址。先把输入格式和目标系统的数据类型对齐,再比较结果,才能避免把表示差异误判成地址变化。