2017-10-11 435 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 ...