为了账号安全,请及时绑定邮箱和手机立即绑定

获取MAC地址

/ 猿问

获取MAC地址

呼啦一阵风 2019-08-31 10:54:12

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

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


查看完整描述

3 回答

?
噜噜哒

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


from uuid import getnode as get_mac

mac = get_mac()

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




查看完整回答
反对 回复 2019-08-31
?
阿波罗的战车

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


#!/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()


查看完整回答
反对 回复 2019-08-31
?
弑天下

netifaces是一个很好的模块,用于获取mac地址(和其他地址)。它是跨平台的,比使用socket或uuid更有意义。


>>> import netifaces

>>> netifaces.interfaces()

['lo', 'eth0', 'tun2']


>>> netifaces.ifaddresses('eth0')[netifaces.AF_LINK]

[{'addr': '08:00:27:50:f2:51', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]


查看完整回答
反对 回复 2019-08-31

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信