找不到它,如果重复请提前道歉。
我想转换地址,例如,
0000000000000000FFFF00000B79290A
转换成人类可读的形式。注意,虽然是 IPv6,但实际上是嵌入了 IPv4 地址,因此最好将其转换为:
10.41.121.11
我从/proc/net/tcp读取了这种类型的地址,并且想解析它。
谢谢。
最佳答案
Ruby 附带了 IPAddr 类,它可以将 IPv4 和 IPv6 字符串解析为对象。还有NetAddr这是非常强大的。尽可能使用预先发明的轮子,因为它们经过了充分测试并包含有用的方法:
require 'ipaddr'
IPAddr.new "[#{'0000000000000000FFFF00000B79290A'.scan(/.{4}/).join(':')}]"
#<IPAddr: IPv6:0000:0000:0000:0000:ffff:0000:0b79:290a/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
有必要将字符串转换为冒号分隔的字段,并将其包装在 [...]
中,告诉 IPAddr 将其视为 IPv6 地址:
'0000000000000000FFFF00000B79290A'.scan(/.{4}/)
=> [
[0] "0000",
[1] "0000",
[2] "0000",
[3] "0000",
[4] "FFFF",
[5] "0000",
[6] "0B79",
[7] "290A"
]
'0000000000000000FFFF00000B79290A'.scan(/.{4}/).join(':')
=> "0000:0000:0000:0000:FFFF:0000:0B79:290A"
使用网络地址:
NetAddr::CIDR.create('0000000000000000FFFF00000B79290A'.scan(/.{4}/).join(':'))
=> #<NetAddr::CIDRv6:0x007fd4971c34f0 @ip=18446462598925330698, @version=6, @address_len=128, @all_f=340282366920938463463374607431768211455, @netmask=340282366920938463463374607431768211455, @network=18446462598925330698, @hostmask=0, @tag={}, @wildcard_mask=340282366920938463463374607431768211455>
关于Ruby:如何将 IP 地址从十六进制字符串转换为人类可读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080128/