网络连接

Process.connections(kind="inet") - 原文

将进程打开的socket连接作为命名元组列表返回。要获得系统范围的连接,请使用 psutil.net_connections()。 每个命名元组提供 6 个属性:

  • fd: 套接字文件描述符。 这可以传递给 socket.fromfd 以获得可用的套接字对象。在 Windows、FreeBSD 和 SunOS 上,它始终设置为 -1。
  • family: 地址族,AF_INETAF_INET6AF_UNIX
  • type: 地址类型,SOCK_STREAMSOCK_DGRAMSOCK_SEQPACKET
  • laddr: 在 AF_UNIX 套接字的情况下,本地地址作为 (ip, port) 命名元组或路径。 对于 UNIX 套接字,请参阅下面的注释。
  • raddr: 在 UNIX 套接字的情况下,远程地址作为(ip, port) 命名元组或绝对路径。 当远程端点未连接时,您将获得一个空元组 (AF_INET*) 或 "" (AF_UNIX)。 对于 UNIX 套接字,请参阅下面的注释。
  • status: 表示 TCP 连接的状态。 返回值是 psutil.CONN_* 常量之一。 对于 UDP 和 UNIX 套接字,这始终是 psutil.CONN_NONE

kind 参数是一个字符串,用于过滤符合以下条件的连接:

Kind 值网络连接使用
"inet"IPv4 和 IPv6
"inet4"IPv4
"inet6"IPv6
"tcp"TCP
"tcp4"基于 IPv4 的 TCP
"tcp6"基于 IPv6 的 TCP
"udp"UDP
"udp4"基于 IPv4 的 UDP
"udp6"基于 IPv6 的 UDP
"unix"UNIX 套接字(UDP 和 TCP 协议)
"all"所有可能的族和协议的总和

例子:

>>> import psutil
>>> p = psutil.Process(1694)
>>> p.name()
'firefox'
>>> p.connections()
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),
pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING'),
pconn(fd=119, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=60759), raddr=addr(ip='72.14.234.104', port=80), status='ESTABLISHED'),
pconn(fd=123, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=51314), raddr=addr(ip='72.14.234.83', port=443), status='SYN_SENT')]

注释: (Solaris) 不支持 UNIX 套接字。

注释: (Linux, FreeBSD) UNIX 套接字的“raddr”字段始终设置为“”。 这是操作系统的限制。

注释: (OpenBSD) UNIX 套接字的“laddr”和“raddr”字段始终设置为“”。 这是操作系统的限制。

注释: (AIX) psutil.AccessDenied 异常总是抛出,除非以 root 身份运行(lsof 也是如此)。

5.3.0 版本中修改: : “laddr”和“raddr”被命名为元组。