概要
接続している 無線LAN、有線LANの接続状況によってい実行するかどうかを判断するスクリプトを書こうと思い調べたのでまとめる。
- nmcliを使う
- フィールドの形で取得できる
- CentOS7,ubuntu16.04などNetwork Manager が使用できれば使える。
/proc/net/wireless
/proc/ 以下のファイルからSSIDを取得できればいいと思い調べてみた。
その結果’/proc/net/wireless’から接続しているデバイス名と無線強度などの情報を得ることができた。
$ cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
wlp4s0: 0000 70. -14. -256 0 0 0 0 91 0
しかし、必要であるSSIDについては取得できなかったため次の方法を探した。
iwconfig
このコマンドはワイヤレスインタフェースの設定を行うコマンドである。
これに何も引数を与えないとその時のワイヤレス・ネットワークの設定が表示される
$ iwconfig
wlp4s0 IEEE 802.11 ESSID:”myAP”
Mode:Managed Frequency:2.432 GHz Access Point: 88:57:EE:7B:3C:40
Bit Rate=150 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr=2347 B Fragment thr:off
Power Management:on
Link Quality=70/70 Signal level=-14 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:120 Missed beacon:0
これで目的である接続しているSSIDは取得できた。
しかし、有線LANに接続しているかはわからないし、cutやgrepなどでパースしづらい。
そこでいろいろ調べたところask ubuntu にてnmcliを用いた方法があった。
nmcliを用いた方法
nmcli はNetworkManager をcliより設定するためのコマンドである。これには -t|–terse オプションにより処理しやすい形式で出力される。また、 -f | –fields オプションにて出力する項目を選ぶことができる。
$ nmcli -t -f state,type,device,connection dev status
connected:wifi:wlp4s0:myAP
unavailable:ethernet:enp0s25:–
unmanaged:loopback:lo:–
これによりパースしやすい形式でネットワークの状態を取得できる。
参考
ask ubuntu How do I find out the name of the SSID I’m connected to from the command line?