在Python中,有没有办法检测给定的网络接口是否已启动?
在我的脚本中,用户指定了一个网络接口,但我想确保接口已启动并且已经分配了IP地址,然后再执行其他操作。
我在Linux上,我是根。
正如@Gabriel Samfira建议的那样,我使用了netifaces
。当IP地址与给定接口关联时,以下函数返回True。
def is_interface_up(interface):
addr = netifaces.ifaddresses(interface)
return netifaces.AF_INET in addr
文档是here
接口可以配置一个IP地址,但不能启动,因此接受的答案是错误的。你实际上需要检查/sys/class/net/<interface>/flags
。如果内容在变量标志中,则flags & 0x1
是接口是否启用。
根据应用程序的不同,/sys/class/net/<interface>/operstate
可能是您真正想要的,但从技术上讲,接口可能会向上并且operstate
可能会降低,例如没有连接电缆时。
所有这些当然都是针对Linux的。
使用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]
您可以在/sys/class/net/<interface>/operstate
中查看该文件的内容。如果内容不是down
,那么界面就会启动。
如果问题是关于检查电缆是否连接(FreeBSD);
[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支持:( ...