python-在Windows中正确获取MAC地址

2024-04-26 09:58:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Windows7和Python2.6。我想得到我的网络接口的MAC地址。


我试过使用wmi模块:

def get_mac_address():

    c = wmi.WMI ()
    for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
        return  interface.MACAddress

但是,在没有internet连接的情况下执行时遇到问题。


我试过使用uuid模块:

from uuid import getnode 
print getnode()

但是,返回值是MAC地址的48字节表示

66610803803052

1)如何将给定的数字转换为ff:ff:ff:ff:ff:ff格式?
2) 有没有更好的方法来获取MAC地址?


Tags: 模块getuuidaddressmac地址defwmi
3条回答

在Python 2中试试这个:

import uuid

def get_mac():
  mac_num = hex(uuid.getnode()).replace('0x', '').upper()
  mac = '-'.join(mac_num[i : i + 2] for i in range(0, 11, 2))
  return mac

print get_mac()

如果您使用的是Python3,请尝试以下操作:

import uuid

def get_mac():
  mac_num = hex(uuid.getnode()).replace('0x', '').upper()
  mac = '-'.join(mac_num[i: i + 2] for i in range(0, 11, 2))
  return mac

print (get_mac())

使用Python3规范:

>>> import uuid
>>> mac_addr = hex(uuid.getnode()).replace('0x', '')
>>> print(mac_addr)
>>> 94de801e0e87
>>> ':'.join(mac_addr[i : i + 2] for i in range(0, 11, 2))
>>> '94:de:80:1e:0e:87

或者

print(':'.join(['{:02x}'.format((uuid.getnode() >> i) & 0xff) for i in range(0,8*6,8)][::-1]))

这是有效的:

>>> address = 1234567890
>>> h = iter(hex(address)[2:].zfill(12))
>>> ":".join(i + next(h) for i in h)
'00:00:49:96:02:d2'

或:

>>> "".join(c + ":" if i % 2 else c for i, c in enumerate(hex(address)[2:].zfill(12)))[:-1]
'00:00:49:96:02:d2'

或:

>>> h = hex(address)[2:].zfill(12)
>>> ":".join(i + j for i, j in zip(h[::2], h[1::2]))
'00:00:49:96:02:d2'

首先将数字转换为十六进制,将其填充为12个字符,然后将其转换为一系列两个字符字符串,然后用冒号将其连接起来。但是,这取决于MAC查找方法的准确性。

相关问题 更多 >