使用python的MAC、ethernet id

2024-05-29 06:02:22 发布

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

如何使用python获得正确的本地网卡MAC/Ethernet id? 关于Google/stackoverflow的大部分文章建议解析ipconfig/all(windows)和ifconfig(Linux)的结果。 在windows(2x/xp/7)上,“ipconfig/all”工作正常,但这是一种故障安全方法吗? 我是linux新手,我不知道“ifconfig”是否是获取MAC/以太网id的标准方法

我必须在python应用程序中实现一个基于本地MAC/Ethernet id的许可检查方法

当您安装了VPN或虚拟化应用程序(如VirtualBox)时,会出现一种特殊情况。在这种情况下,您将获得一个以上的MAC/以太网id。如果我必须使用解析方法,这不会是一个问题,但我不确定。

干杯

普拉山特


Tags: 方法id应用程序windowsmacgoogle文章情况
3条回答

在linux上,您可以通过sysfs访问硬件信息。

>>> ifname = 'eth0'
>>> print open('/sys/class/net/%s/address' % ifname).read()
78:e7:g1:84:b5:ed

这样就避免了对ifconfig进行外壳处理和解析输出的复杂性。

import sys
import os

def getMacAddress(): 
    if sys.platform == 'win32': 
        for line in os.popen("ipconfig /all"): 
            if line.lstrip().startswith('Physical Address'): 
                mac = line.split(':')[1].strip().replace('-',':') 
                break 
    else: 
        for line in os.popen("/sbin/ifconfig"): 
            if line.find('Ether') > -1: 
                mac = line.split()[4] 
                break 
    return mac      

是一个跨平台的函数,它将为您返回答案。

我使用了基于socket的解决方案,在linux上运行良好,我相信windows也可以

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]])[:-1]

getHwAddr("eth0")

Original Source

相关问题 更多 >

    热门问题