Python:检查网络接口是否已启动

Ric*_*son 7 python ip networking dhcp network-interface

在Python中,有没有办法检测给定的网络接口是否已启动

在我的脚本中,用户指定了一个网络接口,但我想确保接口已启动并且已经分配了IP地址,然后再执行其他操作.

我在Linux上,我是.

use*_*197 9

接口可以配置一个IP地址而不是up,因此接受的答案是错误的.你真的需要检查/sys/class/net/<interface>/flags.如果内容在变量标志中,flags & 0x1则表示接口是否已启动.

根据应用程序的不同,/sys/class/net/<interface>/operstate可能是您真正想要的,但从技术上讲,接口可以向上和operstate向下,例如,当没有连接电缆时.

所有这些当然都是针对Linux的.

  • 警告:在 Linux Mint 18.2 中,用于关闭网络适配器的 Cinnamon 网络管理器小程序控件使其保持正常运行和运行状态。不过,它会删除 IP 地址。 (2认同)

Ric*_*son 8

正如@Gabriel Samfira建议的那样,我用过netifaces.当IP地址与给定接口关联时,以下函数返回True.

def is_interface_up(interface):
    addr = netifaces.ifaddresses(interface)
    return netifaces.AF_INET in addr
Run Code Online (Sandbox Code Playgroud)

文档在这里

  • 不幸的是,这对于IPv6 / AF_INET6确实只起作用一半:当成为RUNNING的接口获得其LLA时,当同一接口脱机时,LLA仍然存在。 (2认同)

ofi*_*ule 7

使用psutil回答:

import psutil
import socket

def check_interface(interface):
    interface_addrs = psutil.net_if_addrs().get(interface) or []
    return socket.AF_INET in [snicaddr.family for snicaddr in interface_addrs]
Run Code Online (Sandbox Code Playgroud)