使用 Python 打印本机 Mac 地址

简介: 使用 Python 打印本机 Mac 地址

要实现获取本机 MAC 地址的功能,我们可以使用 Python 中的标准库。具体来说,uuid 库能够提供获取 MAC 地址的方法,而 socketfcntl 库则能够帮助我们在 Linux 系统上获取网络接口的详细信息,包括 MAC 地址。在这里,我将向你展示几种不同的方法来实现这一功能,并解释每种方法的工作原理以及它们之间的区别。

使用 uuid 获取 MAC 地址

uuid.getnode() 函数可以直接返回当前设备的 MAC 地址。这种方法简单易行,但需要注意的是,uuid.getnode() 有时候可能会返回一个软件生成的、并非真实硬件地址的 MAC 地址。

import uuid
def get_mac_address_uuid():
    mac = uuid.getnode()
    mac_address = `:`.join([`{:02x}`.format((mac >> elements) & 0xff) for elements in range(2, 10, 2)][::-1])
    return mac_address
print(`MAC 地址 (通过 uuid):`, get_mac_address_uuid())

在 Linux 中使用 socketfcntl 获取 MAC 地址

对于需要直接从网络接口查询 MAC 地址的场景,特别是在 Linux 系统上,我们可以利用 socketfcntl 模块来实现。这种方法允许我们针对特定的网络接口获取 MAC 地址,因此适用于需要获取具体网络接口 MAC 地址的情况。

import socket
import fcntl
import struct
def get_mac_address_linux(interface=`eth0`):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack(`32s`, bytes(interface[:15], `utf-8`)))
    return `:`.join([`%02x` % char for char in info[18:24]])
print(`MAC 地址 (Linux, 通过 socket 和 fcntl):`, get_mac_address_linux())

跨平台解决方案:结合使用 netifaces

虽然上述方法在大多数情况下都能够有效工作,但它们或多或少存在一些限制,比如平台兼容性问题或可能获取到软件生成的 MAC 地址。为了提供一个更加通用且稳定的解决方案,可以使用 netifaces 库来跨平台获取网络接口信息,包括 MAC 地址。

首先,需要安装 netifaces 库:

pip install netifaces

然后,使用如下代码来获取所有网络接口的 MAC 地址:

import netifaces
def get_mac_addresses_netifaces():
    mac_addresses = {}
    for interface in netifaces.interfaces():
        addrs = netifaces.ifaddresses(interface)
        try:
            mac_addresses[interface] = addrs[netifaces.AF_LINK][0][`addr`]
        except (KeyError, IndexError):
            continue
    return mac_addresses
print(`所有网络接口的 MAC 地址 (通过 netifaces):`, get_mac_addresses_netifaces())

解释和比较

  • 通过 uuid 获取 的方法非常简单且不依赖于特定平台,但可能不会返回真实的硬件 MAC 地址。
  • Linux 的 socketfcntl 方法 提供了一种在 Linux 上获取特定网络接口 MAC 地址的直接方式,但它不适用于 Windows 或 macOS。
  • 使用 netifaces 是一种跨平台的解决方案,它可以获取所有网络接口的详细信息,包括 MAC 地址。这种方法既灵活又强大,适用于各种不同的操作系统。

通过上述讨论和代码示例,我们可以看到,在 Python 中获取 MAC 地址有多种方法,每种方法都有其适用场景和潜在限制。选择哪种方法取决于具体的需求,比如是否需要跨平台兼容、是否需要针对特定网络接口获取 MAC 地址等因素。通过综合考虑这些因素,可以选择最适合当前需求的方法来实现获取 MAC 地址的功能。

相关文章
|
8月前
|
Python
python 获取mac地址
python 获取mac地址
45 0
|
2月前
|
小程序 Linux 区块链
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
202 0
|
2月前
|
SQL 分布式计算 Python
2024年最新520节日快到了,教你用Python画动态爱心表白!_mac python 画心,2024年最新2024年大厂Python岗面试必问
2024年最新520节日快到了,教你用Python画动态爱心表白!_mac python 画心,2024年最新2024年大厂Python岗面试必问
2024年最新520节日快到了,教你用Python画动态爱心表白!_mac python 画心,2024年最新2024年大厂Python岗面试必问
|
2月前
|
Java 程序员 API
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
400 0
|
2月前
|
Shell 测试技术 Python
在Mac上用Python调用终端执行命令
在Mac上用Python调用终端执行命令
47 1
|
2月前
|
iOS开发 Python
mac:python安装路径,带你全面解析Python框架体系架构view篇
mac:python安装路径,带你全面解析Python框架体系架构view篇
|
2月前
|
Python
干货文:在 Mac 中卸载 Python 的方式
干货文:在 Mac 中卸载 Python 的方式
358 1
|
2月前
|
JSON JavaScript 前端开发
Mac系统Anaconda环境配置Python的json库
Mac系统Anaconda环境配置Python的json库
|
8月前
|
人工智能 Java Linux
[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux
[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux
36 1
|
25天前
|
应用服务中间件 开发工具 nginx
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端 最近换了台新 Mac,所有的配置和软件就重新安装下,顺便写个文章。
78 1

相关实验场景

更多