1. 首页
  2. 运维开发
  3. Python

Python获取网卡mac地址的方法

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'

20191120160430

但是正常情况一般我们不止只有一块网卡。那么最好的办法是使用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())

示例图

20191120162713

1 评论
内联反馈
查看所有评论
夏日博客
5 年 前

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code