在Python中,是否有一种方法可以检测给定的网络接口是否已启用?
在我的脚本中,用户指定了一个网络接口,但在执行任何其他操作之前,我想确保该接口已启用并已分配IP地址。
我在Linux上,并且是root。
在我的脚本中,用户指定了一个网络接口,但在执行任何其他操作之前,我想确保该接口已启用并已分配IP地址。
我在Linux上,并且是root。
该接口可以配置IP地址但未启动,所以接受的答案是错误的。实际上,您需要检查/sys/class/net/<interface>/flags
。如果变量flags中的内容,则flags & 0x1
是接口是否已启动的判断依据。
根据应用程序的不同,/sys/class/net/<interface>/operstate
可能是您真正想要的,但在技术上,接口可能已经启动而operstate
是关闭的,例如当没有连接电缆时。
所有这些都是特定于Linux的。
根据@Gabriel Samfira的建议,我使用了netifaces
。以下函数会在给定接口关联IP地址时返回True。
def is_interface_up(interface):
addr = netifaces.ifaddresses(interface)
return netifaces.AF_INET in addr
文档在这里
if anInterface in netifaces.interfaces() #...
- Ricky Robinsonimport 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]
您可以在/sys/class/net/<interface>/operstate
中查看文件的内容。如果内容不是down
,则接口已启动。
[status for status in run.cmd(' /usr/local/bin/sudo ifconfig %s ' % interface).split("\t") if status.strip().startswith("status")][0].strip().endswith("active")
目前还没有API支持这个功能 :( ...
/sys/class/net/<interface>/operstate
,那就有点过度了... - Ricky Robinson