python 获取 mac 地址
在 Python 中,可以通过 uuid
模块来获取设备的 MAC 地址。下面是几种获取 MAC 地址的方法。
方法一:使用 uuid
模块获取 MAC 地址
uuid.getnode()
可以返回设备的 MAC 地址。
示例:使用 uuid
模块获取 MAC 地址
import uuid
def get_mac_address():
mac = uuid.getnode()
mac_address = ':'.join([f'{(mac >> 8*i) & 0xFF:02x}' for i in range(6)][::-1])
return mac_address
# 示例调用
print("MAC 地址:", get_mac_address())
在这个例子中,uuid.getnode()
返回一个整数表示的 MAC 地址,我们将其格式化为标准的 MAC 地址格式(例如:00:1a:2b:3c:4d:5e
)。
方法二:使用 getmac
库获取 MAC 地址
getmac
是一个专用的第三方库,用于跨平台获取设备的 MAC 地址。首先需要安装 getmac
库:
pip install getmac
示例:使用 getmac
获取 MAC 地址
from getmac import get_mac_address
# 获取 MAC 地址
mac_address = get_mac_address()
print("MAC 地址:", mac_address)
这个库会自动检测网络接口,并返回设备的 MAC 地址,兼容 Windows、macOS 和 Linux 系统。
方法三:使用 socket
和 fcntl
模块(仅限 Linux)
在 Linux 上,可以通过 socket
和 fcntl
模块获取特定网络接口的 MAC 地址。
示例:使用 socket
和 fcntl
获取 MAC 地址
import socket
import fcntl
import struct
def get_mac_address(interface_name):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(
s.fileno(),
0x8927,
struct.pack('256s', interface_name[:15].encode('utf-8'))
)
return ':'.join(f'{b:02x}' for b in info[18:24])
# 示例调用
print("eth0 MAC 地址:", get_mac_address('eth0'))
在这个例子中,我们通过 ioctl
获取网络接口 eth0
的 MAC 地址。注意,这种方法仅适用于 Linux 系统。
方法四:使用 psutil
库获取所有网络接口的 MAC 地址
psutil
是一个跨平台的系统和进程监控库,可以用来获取设备的 MAC 地址。
安装 psutil
pip install psutil
示例:使用 psutil
获取所有网络接口的 MAC 地址
import psutil
def get_all_mac_addresses():
mac_addresses = {}
for interface, addrs in psutil.net_if_addrs().items():
for addr in addrs:
if addr.family == psutil.AF_LINK:
mac_addresses[interface] = addr.address
return mac_addresses
# 示例调用
print("所有网络接口的 MAC 地址:", get_all_mac_addresses())
这个例子会返回一个字典,其中包含所有网络接口的名称和对应的 MAC 地址。psutil
可以在 Windows、macOS 和 Linux 上使用。
总结
- 方法一(
uuid
):简单且跨平台,适合获取设备主 MAC 地址。 - 方法二(
getmac
** 库)**:推荐跨平台解决方案,适合获取设备主 MAC 地址。 - 方法三(
socket
** 和fcntl
)**:适用于 Linux,可以获取特定接口的 MAC 地址。 - 方法四(
psutil
** 库)**:适用于多平台,获取所有网络接口的 MAC 地址。
License:
CC BY 4.0