获取 MAC 地址

新手上路,请多包涵

我需要一种在运行时确定计算机 MAC 地址的跨平台方法。对于 Windows,可以使用“wmi”模块,在 Linux 下我能找到的唯一方法是运行 ifconfig 并在其输出中运行正则表达式。我不喜欢使用只能在一个操作系统上运行的包,并且解析另一个程序的输出似乎不是很优雅,更不用说容易出错了。

有谁知道获取 MAC 地址的跨平台方法(windows 和 linux)方法?如果没有,有没有人知道比我上面列出的更优雅的方法?

原文由 Mark Roddy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 801
2 个回答

Python 2.5 包含一个 uuid 实现,它(至少在一个版本中)需要 mac 地址。您可以轻松地将 mac 查找功能导入到您自己的代码中:

 from uuid import getnode as get_mac
mac = get_mac()

返回值为 48 位整数的 mac 地址。

原文由 Armin Ronacher 发布,翻译遵循 CC BY-SA 2.5 许可协议

Linux 下此问题的纯 python 解决方案,用于获取特定本地接口的 MAC,最初由 vishnubob 作为评论发布,并由 Ben Mackey 在 此 activestate 配方 中改进

#!/usr/bin/python

import fcntl, socket, struct

def getHwAddr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
    return ':'.join(['%02x' % ord(char) for char in info[18:24]])

print getHwAddr('eth0')

这是 Python 3 兼容的代码:

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-

import fcntl
import socket
import struct

def getHwAddr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', bytes(ifname, 'utf-8')[:15]))
    return ':'.join('%02x' % b for b in info[18:24])

def main():
    print(getHwAddr('enp0s8'))

if __name__ == "__main__":
    main()

原文由 synthesizerpatel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题