私はWi-Fi APに接続する必要のあるUbuntu Linux用のソフトウェアを作成しています。 WiFiネットワークはあらかじめ定義されておらず、ソフトウェアの1回の実行中に複数回変更することができます(ユーザーは変更を注文します)。これは、SSIDとWPAまたはWEPのパスフレーズのセットがあれば、システム内の任意の設定ファイルを変更する必要なく、ソフトウェアがネットワーク上のネットワークを切り替えることができるはずです。Linux上のPythonから保護されたWiFiに接続する
巨大な問題は、接続にパスフレーズを渡すことです。これまで私がこれまで行ってきたことは次のとおりです。
- Ubuntu 12.10マシンにはWiFiドングルが装備されています。ソフトウェアを実行し、
- connmanの接続を要求するために使用される
- パイソン、0.79
- wpa_supplicantのv1.0を
- 私はそれが可能だろうと思った まず
D-BUSパスフレーズをdバス経由でconnmanに渡すことは可能ですが、connmanのこのバージョンも1.11も、そのための方法を公開していないようです。それから、ディレクトリにservice_<SSID>.conf
ファイルをダンプすることができることが分かりました。ファイルの内容は非常にシンプルであり、次のようになります。このファイルが作成されたら
[service_SSID]
Type=wifi
Name=Network-SSID
Passphrase=here-goes-the-passphrase
を、ネットワークに接続すると、適切なサービスでnet.connman.Service.Connect()メソッドへの単純な呼び出しが必要です。問題は、connmanが再起動されない限り、configファイルを解析しないということです。これにはsudo特権、追加の時間が必要であり、 "今何が間違っているかもしれないか"のすべての事態が発生する危険性があります。その後、パスフレーズがwpa_supplicantのd-bus APIに何らかの形で渡される可能性があるとわかりましたが、何も見つけられませんでした。
Googleの検索も失敗しました。あたかもこれまでこれをやろうとしたことがないかのようです。
コマンドsudo iwconfig wlan0 essid <SSID> key s:<PASSPHRASE>
の結果はSET failed on device wlan0 ; Invalid argument.
になります。また、私は避けたいsudoが必要です。
私はwpa_guiプログラムがどのようにその魔法をしているのか理解しようとしました。まず第一に私はそれがまたsudoが必要であることを発見し、それは直接/var/run/wpa_supplicant/wlan0
に一連のコマンドを送ります。もっと単純なことが分からなければ、この行動を複製することは私の最後の手段になります。
それでは大きな疑問は、WEP/WPAで保護されたWiFiネットワークに接続するためにPythonを使用する方法です。
connmanを使用するのが良いアプローチで、UbuntuのデフォルトであるNetwork Managerに戻すべきではないかと思っています。
あなたはWEPのセキュリティ規定について教えてください。 – Natim
申し訳ありませんが、WEPでこれを行う方法を調査する必要はありませんので、ここではお手伝いできません。私はそれがはるかに異なっているとは思わない。 – ZalewaPL
@ ZalewaPL私はそれが最後の返信からほぼ1年ですが、この[リンク](https://developer.gnome.org/NetworkManager/unstable/spec.html#org.freedesktop.NetworkManager)によると、セキュリティのタイプ(WEP、WPA2など)を入力する必要があっても、パスワード(psk)を入力するだけで済みます。 AddAndActivateConnectionの最初のパラメータの引用: '接続の設定とプロパティ。不完全な設定が不足している場合は、指定されたデバイスと特定のオブジェクトを使用して自動的に完了します。 '** security **と** key-mgmt **を** connection_params **から削除して正常に接続しました。 :) – kv1dr