背景部分(废话部分):

今天使用自己写的程序,发现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语言的学习,止步于大一,并且当时还是双语讲课,导致基础薄弱,接下来就不再对其进行深入探索了。
在这里插入图片描述


版权声明:本文为LM813381916原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/LM813381916/article/details/125876300