2017-10-11 332 views
1

我有一个十六进制数0x000e96a001064d60。我需要将其转换为一个mac地址。我被告知这代表IEEE_Complete地址。将十六进制数转换为mac地址

在我看来,这里似乎有一个蚕食了太多。我该如何将它转换为MAC地址

我已经试过

value = value[2:] if len(value) % 2 == 0 else "0" + value[2:] 
return ":".join(value[i:i+2] for i in range(0, len(value), 2)) 

什么,我得到的是

"00:0e:96:a0:01:06:4d:60 

对我来说,它看起来太长成为MAC address

+0

您能告诉我们您尝试过什么吗? – Kos

+0

MAC地址通常是48位(6个八比特组),但是这个“MAC”地址是64位(8个八比特组)。这是令人困惑的。 – nneonneo

+0

@ liv2hak:你究竟从哪里得到这个地址? – nneonneo

回答

-1

0x000e96a001064d60代表EUI-64 identifier不要猜测,EUI-64需要有FFFE作为中间字节。

EUI-64标识符在使用:(source

  • 火线
  • 的IPv6(修改EUI-64作为单播网络地址的最低-显著64位或链路本地地址时无状态自动配置被使用)
  • 的ZigBee/802.15.4/6LoWPAN的无线个人区域网络

到该号码转换成MAC备考吨Python中使用:

mac = '0x000e96a001064d60' 
mac = mac.split('x')[1].zfill(16) 
':'.join(''.join(x) for x in zip(*[iter(mac)]*2) 

输出:

00:0e:96:a0:01:06:4d:60 
+0

OP有转换的代码。他只是不相信产出。 –

+1

这看起来不像EUI-64:中间两个字节不是FFFE(每个链接到的思科页面)。 – nneonneo

+0

@nneonneo很好的捕获..不知道它是一个“真正的”IPv6地址,或只是看起来像一个。 – blakev

0

一种方式来做到这一点与正则表达式来分割字符串:

import re 

v = 0x000e96a001064d60 
s = '{0:016x}'.format(v) 
s = ':'.join(re.findall(r'\w\w', s)) 
print(s) 
# -> 00:0e:96:a0:01:06:4d:60 

或者没有正则表达式:

v = 0x000e96a001064d60 
s = '{0:016x}'.format(v) 
s = ':'.join(s[i:i + 2] for i in range(0, 16, 2)) 
print(s) 
# -> 00:0e:96:a0:01:06:4d:60 

传统的MAC地址有6个字节。这是一个EUI-48地址。 但是在这里,你有8个字节。所以它看起来像一个EUI-64地址。但是,字节4和5应该是FF:FE ...

相关问题