Ruby:如何将IP地址从十六进制字符串转换为人类可读?

时间:2015-08-18 18:32:04

标签: ruby

无法找到它,如果重复,请提前道歉。

我想转换地址,

0000000000000000FFFF00000B79290A

成人类可读的形式。注意,虽然它是IPv6,但它实际上是嵌入了IPv4地址,因此更优选地将其转换为:

10.41.121.11

我从/ proc / net / tcp读取了这种类型的地址,并想解析它。

谢谢。

1 个答案:

答案 0 :(得分:4)

Ruby附带了IPAddr类,可以将IPv4和IPv6字符串解析为对象。还有NetAddr非常强大。尽可能使用预先发明的车轮,因为它们经过了充分测试并包含有用的方法:

C:\mingw_dev_lib\sdl\lib

有必要将字符串转换为冒号分隔的字段,并将其包装在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地址:

[...]

使用NetAddr:

'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"