Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中将mac地址转换为IPv6链路本地地址_Ruby_Ipv6 - Fatal编程技术网

在Ruby中将mac地址转换为IPv6链路本地地址

在Ruby中将mac地址转换为IPv6链路本地地址,ruby,ipv6,Ruby,Ipv6,如何将Ruby中的mac地址(如00:16:3e:15:d3:a9)转换为IPv6链路本地地址(如修改后的EUI-64,如fe80::216:3eff:fe15:d3a9) 到目前为止,我有以下步骤: mac=“00:16:3e:15:d3:a9” mac.delete!(“:”)#删除冒号 插入(6,“FFFE”)*插入FF:EE在中间 mac=mac.scan(/.{4}/)#分成4个八位组 最主要的问题是翻转第一个八位组的第六位,这是我遇到的问题。这里是您的主要问题:Ruby是一种面向对

如何将Ruby中的mac地址(如
00:16:3e:15:d3:a9
)转换为IPv6链路本地地址(如修改后的EUI-64,如
fe80::216:3eff:fe15:d3a9

到目前为止,我有以下步骤:

mac=“00:16:3e:15:d3:a9”
mac.delete!(“:”)#删除冒号
插入(6,“FFFE”)*插入FF:EE在中间
mac=mac.scan(/.{4}/)#分成4个八位组

最主要的问题是翻转第一个八位组的第六位,这是我遇到的问题。

这里是您的主要问题:Ruby是一种面向对象的语言。您可以通过操纵丰富的结构化对象来创建程序,更准确地说,是通过告诉丰富的结构化对象操纵它们自己来创建程序

但是,您正在操作
String
s。当然,
String
s在Ruby中也是对象,但它们是表示文本的对象,而不是表示IP地址或EUI的对象

您至少应该将IP地址或EUI视为数字,而不是文本,但实际上,您应该将它们视为丰富的结构化IP地址对象或EUI对象

Ruby实际上是它的一部分

以下是将这些地址视为数字和/或对象的示例:

需要“ipaddr”
eui48='00-16-3E-15-D3-A9'
#删除所有分隔符,注意仅“:”是不够的;标准为“-”,但有时也使用“.”
eui48=eui48.gsub(/[^0-9a-zA-Z]/,“”)
#将EUI-48解析为一个数字
eui48=eui48.to_i(16)
#将EUI-48拆分为OUI和制造商指定的零件

这里是你的主要问题:Ruby是一种面向对象的语言。你通过操纵丰富的结构化对象来创建程序,更准确地说,是通过告诉丰富的结构化对象操纵它们自己来创建程序

但是,您正在操作
String
s。当然,
String
s在Ruby中也是对象,但它们是表示文本的对象,而不是表示IP地址或EUI的对象

您至少应该将IP地址或EUI视为数字,而不是文本,但实际上,您应该将它们视为丰富的结构化IP地址对象或EUI对象

Ruby实际上是它的一部分

以下是将这些地址视为数字和/或对象的示例:

需要“ipaddr”
eui48='00-16-3E-15-D3-A9'
#删除所有分隔符,请注意,仅“:”是不够的;标准为“-”,但有时也会使用“.”
eui48=eui48.gsub(/[^0-9a-zA-Z]/,“”)
#将EUI-48解析为一个数字
eui48=eui48.to_i(16)
#将EUI-48拆分为OUI和制造商指定的零件

oui,赋值=eui48.divmod(1)您遇到的问题是,您试图使用文本进行转换。IP和MAC地址都是二进制数。您可以简单地使用位或将MAC地址的U/L位设置为二进制数。然后,您可以转换回文本。您遇到的问题是,您正试图使用文本进行转换。IP和MAC地址都是是二进制数。您可以简单地使用按位或将MAC地址的U/L位设置为二进制数。然后,您可以将其转换回文本。
链接本地地址的前缀是
0xfe80
,长度为16位,因此您必须再追加112位才能获得128位。实际上,请想想它的前缀只有10位,所以要100%正确,它应该是
0x3fa,看起来像
IPAddr.new('fe80::/10',Socket::AF_INET6)
也可以工作。谢谢。在中工作。实际上,您甚至不需要指定地址族,它可以自动检测。
链接本地地址的前缀是
0xfe80
,长度为16位,因此您必须再附加112位才能获得128位。实际上,想想看,前缀x只有10位,所以要100%正确,它应该是
0x3fa,看起来像
IPAddr.new('fe80::/10',Socket::AF_INET6)
也可以工作。谢谢。在中工作。实际上,您甚至不需要指定地址族,它可以自动检测。