web-dev-qa-db-ja.com

ifconfigなしでインターフェースのRUNNING状態を判別する方法は?

背景:Wi-Fi接続が突然ダウンすることがあるので、Sudo ifconfig wlan0と入力してWord RUNNINGを確認します。対応する行は次のようになります。

UP BROADCAST RUNNING MULTICAST  [...]

接続がダウンした場合、RUNNING設定はありません。何にも接続できませんが、インターフェイスはまだアップしています。

RUNNINGの状態を定期的にチェックするスクリプトを書くことを考えています。その文字列を抽出するには、awkを使用すると、Sudo ifconfig wlan0 | awk '/RUNNING/ {print $3}'のようになります。

Ifconfigの出力を解析する代わりにファイルシステムをチェックするなどの別の方法はありますか?

私はDebian Wheezyを使用しています。

ありがとう。


詳細:

わかりました。調査を行い、概念的な混乱を解消しました。

UPフラグとRUNNINGフラグは異なります。 1つ目は、インターフェースが「現在初期化されている」[1]、つまり「システムがインターフェースにリソースを割り当てた」[2]ことを意味します。パケットの送信については何も述べられていません。

RUNNINGフラグは、実際にはパケットが送受信されていることを示します。どうやらこのフラグは、たとえばイーサネットケーブルが接続されていません。

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

[2] https://stackoverflow.com/questions/11679514/what-is-the-difference-between-iff-up-and-iff-running

ワイヤレス接続で何が起こっているのかわかりませんが、結果は同じです。接続が完全に失われている間、インターフェイスはアップのままです(wi-fi LEDライトは私のラップトップでオンのままです)。

5
undostres

ifconfig -snetstat -iなどのコマンドを使用する代わりに、次のファイルをチェックしてWi-Fi接続ステータスを監視できます。

/sys/class/net/wlan0/flagsは、デバイスがオンかオフかを示します。パケット送信については何も通知しないため、接続が機能しているかどうかを確認することはあまり役に立ちません。その内容/値は0x1003(オン)および0x1002(オフ)です。

/sys/class/net/wlan0/operstateは、接続が機能している(パケットが送受信されている)かどうかを示します。このファイルは、RUNNINGによって表示されるifconfigフラグと同等です。値はupdownです。

/sys/class/net/wlan0/carrier/sys/class/net/wlan0/operstateと同じように機能します。値は1(上)と0(下)です。デバイスの電源がオフの場合、ファイルは空です。

5
undostres