使用标准库中的 IPAddr:
IPAddr.new('192.168.0.1').family
=> 2
IPAddr.new('1a03:a240:0100:0000:0000:0000:0000:0000').family
=> 10
所以我猜测 2 代表 IPv4,而 10 代表 IPv6。为什么是 2 和 10?为什么不是 4 和 6?
使用 2 和 10 是没有意义的,因为它暗示 IPv4 是二进制的,而 IPv6 是以 10 为底的,而实际上它们都是二进制的(在幕后),并且是 IPv4 的人类可读形式以 10 为底,而对于 IPv6,它是十六进制...
是否有一些我不知道的更深层次的逻辑?
最佳答案
这些数字是在 Socket
模块中定义的常量。
IPv4 地址族是 Socket::AF_INET
,IPv6 是 Socket::AF_INET6
令我吃惊的是,在我的 Ruby (2.0) 上,AF_INET6 的编号与您的不同:
[9] pry(main)> IPAddr.new('1a03:a240:0100:0000:0000:0000:0000:0000').family
=> 30
[10] pry(main)> Socket::AF_INET6
=> 30
[11] pry(main)> Socket::AF_INET
=> 2
所以最好不要使用数字本身,而是使用常量名称。
关于ruby - 为什么 Ruby 的 IPAddr#family 方法在 IPv4 地址上调用时返回 2,而在 IPv6 上调用时返回 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996972/