pywifiを使用する経緯
自宅回線に"レオネット"と"ソフトバンクエアー"を引いていおり、普段はソフトバンクエアーを利用してたまにレオネットを使います。
そんなたまにしか出番がないレオネットは90分インターネットにアクセスしないとIPアドレスが払い出されなくなり、ネットワークから切り離れてしまいます。
対処法としてルータのNTPを60分おきに取得する方法があるのですが、設定してもなぜか毎回パスワードをも止められ始末。。。
そこでラズパイのログローテーションで毎分インターネットにアクセスしようと考えましたが、普段はソフトバンクエアーに繋いでいるため、一度レオネットに繋いでからインターネットにアクセスしないといけません。
しかし、レオネットに自動で接続するにはどうすれば。。。
そこで登場しますのがpythonモジュールの"pywifi"です。
pywifiはPythonでWi-Fiを操作するためのライブラリで、Wi-Fiのスキャン、接続、切断などを行うことができます。
インストール
以下コマンドでインストールしてください。
pip install pywifi
作成コード
以下に作成したコードを記載します。
import time
import pywifi
from pywifi import const
wifi = pywifi.PyWiFi() # pywifiオブジェクトのPyWiFi属性を参照する。
iface = wifi.interfaces()[0] # コンピューターに接続されているWi-Fiインターフェースのリストを返す。
Name = iface.name() # 取得したWi-Fiインターフェースの名前を取得する。
#profileの作成
profile = pywifi.Profile()
profile.ssid = 'xxx'
profile.auth = const.AUTH_ALG_OPEN
profile.akm.append(const.AKM_TYPE_WPA2PSK)
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = 'xxx'
iface.remove_all_network_profiles() #Wi-Fiインターフェースからすべてのネットワークプロファイルを削除するための関数。
tmp_profile = iface.add_network_profile(profile) #Wi-Fiインターフェースに新しいネットワークプロファイルを追加するための関数。
iface.connect(tmp_profile) #インターネットに接続する。
#"接続成功""接続失敗"の表示。
time.sleep(1)
if iface.status() == const.IFACE_CONNECTED:
print('接続成功')
else:
print('接続失敗')
コード解説
xxxは各自の環境にあった値を入力してください。
暗号化方式がAESの場合は以下コードとなります。
profile.cipher = const.CIPHER_TYPE_CCMP
レオネットの暗号化方式がAESと表示されいましたが、pywifiのドキュメントをみてもAESの記載がないのでAESは対応していないのか??
と焦りましたが、実際はそうではなくAESは暗号化アルゴリズムであって、CCMPはAESを用いた暗号化方式なんですよね。
なのでイメージは”AES=CCMP”でOKです。
以下サイトがとても参考になりました。
無線LANの暗号化方式について整理してみた
参照先
pywifi github