Python psutil.net_if_addrs

举报
福州司马懿 发表于 2024/12/08 23:56:39 2024/12/08
【摘要】 psutil.net_if_addrs() 是 Python 中 psutil 库的一个函数,它用于获取系统上所有网络接口的地址信息。这个函数返回一个字典,字典的键是网络接口的名称(如 'eth0'、'wlan0'、'Loopback Pseudo-Interface 1' 等),值是一个列表,列表中的每个元素都是一个命名元组(在 Python 3.x 中是一个 namedtuple),包含...

psutil.net_if_addrs() 是 Python 中 psutil 库的一个函数,它用于获取系统上所有网络接口的地址信息。这个函数返回一个字典,字典的键是网络接口的名称(如 'eth0''wlan0''Loopback Pseudo-Interface 1' 等),值是一个列表,列表中的每个元素都是一个命名元组(在 Python 3.x 中是一个 namedtuple),包含了关于该接口上某个地址的详细信息。

返回的命名元组通常包含以下字段:

  • family: 地址族(socket.AF_INET 表示 IPv4,socket.AF_INET6 表示 IPv6,psutil.AF_LINK 表示链路层地址,如 MAC 地址)。
  • address: 地址本身(对于 IPv4 和 IPv6 是 IP 地址的字符串表示,对于链路层地址是 MAC 地址的字符串表示,格式为 xx:xx:xx:xx:xx:xx)。
  • netmask: 网络掩码(对于 IPv4 和 IPv6 地址,可能是一个字符串表示的掩码,也可能是一个整数表示的掩码长度;对于链路层地址,此字段通常为 None 或不适用)。
  • broadcast: 广播地址(对于 IPv4 地址,可能是一个字符串表示的广播地址;对于 IPv6、链路层地址或其他不支持广播的地址族,此字段通常为 None)。
  • ptp: 点对点地址(对于某些类型的网络接口,如点对点链路,可能有一个与之关联的对等地址;对于大多数网络接口,此字段通常为 None)。

需要注意的是,不是所有字段都会在所有地址族或所有网络接口上可用。例如,链路层地址通常没有 netmaskbroadcastptp 字段。

示例代码:

import psutil
import socket

# 获取网络接口的地址信息
net_if_addrs = psutil.net_if_addrs()

# 遍历并打印每个网络接口的地址信息
for iface, addrs in net_if_addrs.items():
    print(f"接口: {iface}")
    for addr in addrs:
        print(f"  地址族: {addr.family} ({socket.AF_INET if addr.family == socket.AF_INET else '非IPv4'})")
        print(f"  地址: {addr.address}")
        if addr.netmask is not None:
            print(f"  网络掩码: {addr.netmask}")
        if addr.broadcast is not None:
            print(f"  广播地址: {addr.broadcast}")
        if addr.ptp is not None:
            print(f"  点对点地址: {addr.ptp}")
    print()

在这个示例中,我使用了 socket 模块来将地址族(family)的整数值转换为更易读的字符串(例如,将 socket.AF_INET 转换为 'IPv4',尽管在这个上下文中我实际上只检查了它是否等于 socket.AF_INET 来决定是否打印 '非IPv4')。然而,请注意,psutil.AF_LINK(用于链路层地址)并不是 socket 模块的一部分,因此你不能直接通过 socket 模块来检查它;在这个例子中,我只是没有为 psutil.AF_LINK 提供特殊的字符串表示。

psutil.net_if_addrs() 函数提供的信息对于诊断网络问题、配置网络接口或监控网络状态非常有用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。