python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)

文章目录

使用Python psutil库获取网络信息

Python的psutil库是一个跨平台库,能够方便地获取系统使用情况和运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。本文将简单介绍如何使用psutil库获取网络信息。

安装psutil库

在开始之前,首先需要安装psutil库。可以通过pip命令进行安装:

python 复制代码
pip install psutil

加速安装用:

python 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple psutil

获取网络连接信息

查看所有网络连接

我们可以使用psutil.net_connections()方法来获取所有网络连接信息。这个方法返回一个列表,每个元素都是一个pconn对象,该对象表示一个网络连接,并有以下属性:

  • fd:套接字文件描述符
  • family:地址家族
  • type:地址类型
  • laddr:本地地址
  • raddr:远程地址
  • status:状态
  • pid:创建套接字的进程ID

下面的代码将列出所有网络连接:

python 复制代码
import psutil

connections = psutil.net_connections()

for conn in connections:
    print(conn)

过滤特定状态的连接

也可以通过过滤特定状态的连接来查找所需的网络连接。例如,要查找所有ESTABLISHED状态的连接,可以使用以下代码:

python 复制代码
import psutil

connections = psutil.net_connections()
established_connections = [conn for conn in connections if conn.status == psutil.CONN_ESTABLISHED]

for conn in established_connections:
    print(conn)

获取网络接口信息

psutil库还提供了一个名为net_if_addrs()的函数,该函数用于获取网络接口信息。这个函数返回一个字典,每个元素都是一个snic对象,表示一个网络接口,并有以下属性:

  • family:地址家族
  • address:IP地址
  • netmask:网络掩码
  • broadcast:广播地址
  • ptp:点对点连接

下面的代码将列出所有网络接口及其详细信息:

python 复制代码
import psutil

interfaces = psutil.net_if_addrs()

for name, addrs in interfaces.items():
    print(f"Interface {name}:")
    for addr in addrs:
        print(f"  {addr}")

(信息敏感不予展示)

获取网络IO统计信息

psutil库的net_io_counters()函数可以获取网络IO统计信息,返回一个pnicstats对象,该对象表示一个网络IO统计信息,并有以下属性:

  • bytes_sent:发送的字节数
  • bytes_recv:接收的字节数
  • packets_sent:发送的数据包数
  • packets_recv:接收的数据包数
  • errin:输入错误
  • errout:输出错误
  • dropin:丢弃的输入数据包
  • dropout:丢弃的输出数据包

实例1

下面的代码将列出所有网络接口的网络IO统计信息:

python 复制代码
import psutil

io_stats = psutil.net_io_counters(pernic=True)

for name, stats in io_stats.items():
    print(f"Interface {name}:")
    print(f"  Bytes sent: {stats.bytes_sent}")
    print(f"  Bytes received: {stats.bytes_recv}")
    print(f"  Packets sent: {stats.packets_sent}")
    print(f"  Packets received: {stats.packets_recv}")

实例2

下面代码会打印机器上每个网络接口的IP地址、子网掩码和广播地址等信息:

python 复制代码
import psutil

addrs = psutil.net_if_addrs()

for interface_name, interface_addresses in addrs.items():
    for address in interface_addresses:
        if str(address.family) == 'AddressFamily.AF_INET':
            print(f"=== Interface: {interface_name} ===")
            print(f"  IP Address: {address.address}")
            print(f"  Netmask: {address.netmask}")
            print(f"  Broadcast IP: {address.broadcast}")
        elif str(address.family) == 'AddressFamily.AF_PACKET':
            print(f"=== Interface: {interface_name} ===")
            print(f"  MAC Address: {address.address}")
            print(f"  Netmask: {address.netmask}")
            print(f"  Broadcast MAC: {address.broadcast}")

(信息敏感不予展示)

总结

本文详细介绍了如何使用psutil库获取网络信息,包括如何查看所有网络连接、过滤特定状态的连接、获取网络接口信息和获取网络IO统计信息。这些功能使得psutil库成为一个强大的工具,可以帮助我们更好地理解和监控系统的网络活动。

参考资料:

相关推荐
兵慌码乱4 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot5 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海10 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱13 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽17 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码18 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python