Linux 获取以太网设备的永久地址

Linux 获取以太网设备的永久地址,linux,python-3.x,Linux,Python 3.x,我正在寻找一种在Python3中检索以太网设备永久地址的方法 我已经研究了各种方法来实现这一点: 下面是一个可以检索MAC地址的Python库。遗憾的是,它无法获取设备的永久地址。所以它可以被覆盖 给你。这正是我想要的,但它已被弃用,并且不会在我开发的特定机器上与Python3一起运行 当然,我可以从Python中的命令行调用ethtool-p,使用subprocess并读取输出 我已经查看了的代码,我需要的信息似乎存在于名为perm_addr的struct dev字段中: static int

我正在寻找一种在Python3中检索以太网设备永久地址的方法

我已经研究了各种方法来实现这一点:

下面是一个可以检索MAC地址的Python库。遗憾的是,它无法获取设备的永久地址。所以它可以被覆盖

给你。这正是我想要的,但它已被弃用,并且不会在我开发的特定机器上与Python3一起运行

当然,我可以从Python中的命令行调用ethtool-p,使用subprocess并读取输出

我已经查看了的代码,我需要的信息似乎存在于名为perm_addr的struct dev字段中:

static int ethtool_get_perm_addr(struct net_device *dev, void __user *useraddr)
{
    struct ethtool_perm_addr epaddr;

    if (copy_from_user(&epaddr, useraddr, sizeof(epaddr)))
        return -EFAULT;

    if (epaddr.size < dev->addr_len)
        return -ETOOSMALL;
    epaddr.size = dev->addr_len;

    if (copy_to_user(useraddr, &epaddr, sizeof(epaddr)))
        return -EFAULT;
    useraddr += sizeof(epaddr);
    if (copy_to_user(useraddr, dev->perm_addr, epaddr.size))
        return -EFAULT;
    return 0;
}

如何在Python中访问这些信息?我更喜欢全Python解决方案,而不是打开子进程并调用ethtool。

它可以通过文件/sys/class/net//地址获得。文件/sys/class/net//addr\u assign\u type指示地址的类型


请参阅,并在该文档中查找“permanent”。

您可以做的一件事是在python中的命令行中,在子流程模块的帮助下,调用ethtool(如果适用的话)you@GreenCloakGuy当前位置我知道这一点,我在问题中也提到了这一点。可能还没有说清楚。请看编辑。也许这类信息现在可以通过/sys/class/net/获得?如果这些信息没有从/sys/class/net/获得,那么我可以想到的其他可能性包括使用Python FFI,或者在C.Cheers@Roadowl中编写Python绑定: