如何在没有 ifconfig 的情况下确定接口 RUNNING 状态?

und*_*res 5 wifi scripting bash ifconfig

一些背景:有时我的 wi-fi 连接突然断开,所以我输入sudo ifconfig wlan0并检查单词RUNNING。相应的行如下所示:

UP BROADCAST RUNNING MULTICAST  [...]
Run Code Online (Sandbox Code Playgroud)

当连接断开时,没有RUNNING设置;我无法连接到任何东西,但接口仍在运行。

我正在考虑编写一个脚本来定期检查RUNNING状态。为了提取该字符串,使用awk会是这样的:sudo ifconfig wlan0 | awk '/RUNNING/ {print $3}'

是否有另一种方法,例如检查文件系统而不是解析 ifconfig 的输出?

我正在使用 Debian Wheezy。

谢谢。


更多信息:

好的,刚刚做了一些研究并澄清了一些概念上的混乱。

UPRUNNING标志是不同的。第一个表示接口“当前已初始化”[1],即“系统为接口分配了资源”[2]——它没有说明数据包传输。

RUNNING标志实际上表示正在发送和接收数据包。显然,如果例如以太网电缆被拔掉,这个标志就会消失。

[1] https://docs.oracle.com/cd/E19253-01/816-4554/ipconfig-141/index.html

[2] /sf/ask/817566011/

我不知道我的(或任何)无线连接发生了什么,但结果是一样的:当连接完全丢失时,接口保持开启(我的笔记本电脑中的 Wi-Fi LED 灯仍然亮着)。

und*_*res 6

而不是使用像ifconfig -s或这样的命令netstat -i可以检查以下文件来监控 wi-fi 连接状态:

/sys/class/net/wlan0/flags指示设备是打开还是关闭。它对数据包传输一无所知,因此检查您的连接是否正常工作并不是很有用。它的内容/值是0x1003(on) 和0x1002(off)。

/sys/class/net/wlan0/operstate指示连接是否可操作(正在发送和接收数据包)。这个文件相当于RUNNING标志显示的ifconfig。它的值是updown

/sys/class/net/wlan0/carrier就像/sys/class/net/wlan0/operstate. 它的值是1(向上)和0(向下)。如果设备关闭,则文件为空。