Python的psutil库,源码简单阅读

本文作者在解决程序中MAC地址校验问题时,发现Python的psutil库获取MAC地址受到‘本地连接’干扰。通过调试和源码阅读,了解到psutil通过C扩展模块_psutil_windows调用C语言的net_if_addrs函数来获取MAC。尽管作者对C语言不熟悉,但确认了psutil使用C语言实现的部分来完成这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景部分(废话部分):

今天使用自己写的程序,发现mac地址校验通不过了。(程序为了设置使用权限,简单的使用了电脑的mac地址作为校验)
通过调试发现,有一堆的“本地连接*”的东西存在,干扰了mac地址的获取。
在这里插入图片描述

于是准备将本地的多余“本地连接”删除,查了半天之后,发现依然没用,就打断点调试,看看psutil这个库,是怎么获取到电脑的mac地址的。

阅读过程:

通过步入,发现调用的是net_if_addrs函数,红框部分,是这个函数调用的函数
在这里插入图片描述

再次查看调用发现,它是来自一个叫cext的类,而这个cext的类,又是通过叫_psutil_windows的引入的,这个时候,再查看源代码,就找不到相关引用了。
在这里插入图片描述
在网上查看相关资料以后,发现它找不到代码的原因其实是,_psutil_windows这个不是py文件,而是一个pyd文件。
“pyd一般是python外的其他语言如C/C++编写的python扩展模块,即python的一个动态链接库,与dll文件相当。在linux系统中一般为.so文件。也有的时候,为了对python文件进行加密,会把python模块编译成.pyd文件,供其他人使用。”
在这里插入图片描述
这么看下来之后,psutil能获取电脑的mac地址,大概是通过了C语言家族等获取到的。

到这里并没有结束,为了确定猜想,在git上,打开psutil的项目源码,赫然发现约有37%的部分,是C语言写的。
在这里插入图片描述
再次深入查看,发现C语言写了_psutil_windows这个文件,里面提到了net_if_addrs这个部分
在这里插入图片描述
打开这个C之后,发现它获取mac的部分,来自于引用的net.h包,由于对C语言的学习,止步于大一,并且当时还是双语讲课,导致基础薄弱,接下来就不再对其进行深入探索了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值