python如何获取网卡的物理地址,也就是mac地址。可以调用系统命令然后配合re正则模块获取,这个不推荐这样使用。如果您只有一张网卡,那么最简单的办法是这样。
例如:
>>> import uuid >>> address = hex(uuid.getnode())[2:] >>> '-'.join(address[i:i+2] for i in range(0, len(address), 2)) '50-56-c0-00-08-L'
但是正常情况一般我们不止只有一块网卡。那么最好的办法是使用psutil模块。psutil是一个很有用的模块,它基本可以查询所有系统的基础信息,使用简单,功能丰富。psutil模块不在python的基础库,所以使用之前需要安装。
使用举例:
>>> import psutil >>> psutil.net_if_addrs() {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None), snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)], 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None), snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
psutil的net_if_addrs方法可以以字典的形式返回系统上安装的每个网卡相关的地址。该字典的键是网卡NIC名称,值是分配给NIC地址的命名元组列表。每个元组包含5个字段:
family:地址族,即AF_INET或AF_INET6或psutil.AF_LINK,它是指MAC地址。
address:主NIC地址。
netmask:掩码地址,可以为None。
broadcast:广播地址,可以为None。
ptp:字面意思代表点对点,它是点对点接口(通常是VPN)上的目标地址。 广播和ptp是互斥的, 可以为None。
知道这个方法的使用和返回后,获取mac地址的python代码就很好写了。
import psutil def get_net_addr(): macdict = dict() dic = psutil.net_if_addrs() for adapter in dic: sniclist = dic[adapter] for snic in sniclist: if '-' in snic.address and len(snic.address)==17: # print adapter, snic.address macdict[adapter] = snic.address return macdict print(get_net_addr())
示例图
赞