我需要一种在运行时确定计算机MAC地址的跨平台方法。对于windows,可以使用'wmi‘模块,而在Linux下,我能找到的唯一方法就是运行ifconfig并对其输出运行正则表达式。我不喜欢使用只在一个操作系统上工作的包,解析另一个程序的输出似乎不是很优雅,更不用说容易出错了。
有没有人知道跨平台方法(windows和linux)来获取MAC地址?如果没有,有没有人知道比我上面列出的更优雅的方法?
发布于 2008-10-01 19:06:31
Python2.5包括一个uuid实现,它(在至少一个版本中)需要mac地址。您可以轻松地将mac查找函数导入到您自己的代码中:
from uuid import getnode as get_mac
mac = get_mac()
返回值是48位整数形式的mac地址。
发布于 2011-01-25 09:57:17
这个问题的纯python解决方案(在Linux下获取特定本地接口的MAC ),最初是由vishnubob作为评论发布的,并由this activestate recipe中的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()
发布于 2015-08-19 03:16:50
有时我们有多个网络接口。
查找特定接口的mac地址的简单方法是:
def getmac(interface):
try:
mac = open('/sys/class/net/'+interface+'/address').readline()
except:
mac = "00:00:00:00:00:00"
return mac[0:17]
调用该方法很简单
myMAC = getmac("wlan0")
https://stackoverflow.com/questions/159137
复制相似问题