gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:40 29 4
gpt4 key购买 nike

找不到,如有重复请提前致歉。

我想像这样转换地址,

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com