【问题标题】:Ruby: How to convert ipv6 uo address to ipv4 ip address?Ruby:如何将 ipv6 uo 地址转换为 ipv4 ip 地址?
【发布时间】:2016-08-16 21:45:45
【问题描述】:

使用 ipv4_mapped 很容易将 ipv4 转换为 ipv6。但是周围的人呢?

我在 IpAddr 文档中没有找到这样做的方法。

【问题讨论】:

  • IP 不能这样工作,是吗?您可以在 IPv6 中封装 IPv4 地址,这是规范的一部分,但反过来需要 IPv4 到 IPv6 代理。
  • IPv4 和 IPv6 是不同的协议。 IPv4 地址以 IPv6 表示法表示,但这并不意味着您可以只在不同协议之间转换地址。它们是不同的,必须分开处理。

标签: ruby ipv6 ipv4


【解决方案1】:

首先,重要的是要了解大多数 IPv6 地址无法转换为 IPv4 地址(原因有多种,最明显的原因是无法将 128 位数字转换为 32 位)。唯一可以转换为 IPv4 的 IPv6 地址是从 IPv4 地址映射的地址(例如由IPAddr#ipv4_mapped 生成的地址)。为此,我们有IPAddr#native

require "ipaddr"

ip = IPAddr.new("192.168.2.128")
ipv6 = ip.ipv4_mapped
puts ipv6.native
# => 192.168.2.128

【讨论】: