2017-10-11 3 views
1

Ich habe eine Hex-Nummer 0x000e96a001064d60. Ich muss dies in eine Mac-Adresse konvertieren. Mir wurde gesagt, dass dies die IEEE_Complete-Adresse darstellt.Konvertieren Hex-Nummer zu Mac-Adresse

In meinen Augen scheint es hier zu viel zu knabbern. Wie konvertiere ich das MAC-Adresse

ich versucht habe

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)) 

was bekomme ich ist

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

Für mich ist es zu lang sieht ein MAC address

+0

Können Sie uns zeigen, was Sie versucht haben? – Kos

+0

MAC-Adressen sind normalerweise 48 Bit (6 Oktetts), aber diese "MAC" -Adresse ist 64 Bit (8 Oktetts). Das ist verwirrend. – nneonneo

+0

@ Liv2hak: woher genau hast du diese Adresse bekommen? – nneonneo

Antwort

-1

0x000e96a001064d60 stellt eine sein EUI-64 identifier. Raten Sie nicht, ein EUI-64 muss FFFE als die mittleren Bytes haben.

EUI-64-Identifikatoren verwendet werden, in: (source)

  • FireWire
  • IPv6 (Modified EUI-64 als die am wenigsten signifikanten 64 Bits eines Unicast-Netzwerkadresse oder link-lokale Adresse, wenn zustandslose Autokonfiguration verwendet wird)
  • ZigBee/802.15.4/6LoWPAN wireless Personal Area Networks

um diese Zahl zu einer MAC forma zu konvertieren t in Python verwenden:

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

Ausgang:

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

Das OP hat den Code zu konvertieren. Er ist einfach nicht von der Ausgabe überzeugt. –

+1

Das sieht nicht wie ein EUI-64 aus: die mittleren zwei Bytes sind nicht FFFE (je nach Cisco-Seite, mit der Sie verbunden sind). – nneonneo

+0

@nneonneo guten Fang .. Wunder, wenn es eine "echte" IPv6-Adresse ist, oder nur wie eine aussieht. – blakev

0

Eine Möglichkeit, das zu tun, mit RegEx die Zeichenfolge aufgeteilt:

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 

Oder ohne RegEx:

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 

Eine klassische MAC-Adresse hat 6 Bytes. Dies ist eine EUI-48-Adresse. Aber hier haben Sie 8 Bytes. Es sieht also wie eine EUI-64-Adresse aus. Aber, Bytes 4 und 5 sollten FF sein: FE ...