Linux で iwlist コマンドが利用可能なワイヤレス ネットワークをスキャンする方法を知りたいです。そのソース コードを読んだところ、SIOCSIWSCAN を使用してスキャンをトリガーし、SIOCGIWSCAN を使用してスキャン結果を取得する ioctl 呼び出しがありました。しかし、これらのシステム コールによってビーコン フレームがどのようにキャプチャされ、分析されるのでしょうか。
1 に答える
iwlist(8)およびその他のワイヤレス ツールは、 Linux Wireless Extensions (WEXT)をサポートするさまざまなワイヤレス デバイス ドライバーに共通のフロント エンドを提供します。各ドライバーは、このインターフェイスによって定義されたデバイス固有の操作を実装するハンドラーを WEXT に登録します。スキャンの場合、トリガー スキャン (コマンド SIOCSIWSCAN) とスキャン結果の取得 (コマンド SIOCGIWSCAN) の 2 つのハンドラがあります。デバイスがスキャンを完了すると、 netlinkインターフェイス経由で SIOCGIWSCAN イベントを WEXT に送信します。このソケットをリッスンするアプリケーションは、SIOCGIWSCAN コマンドを発行して、デバイスからスキャン結果を取得できます。デバイスは、スキャンをどのように選択しても自由に実装できることに注意してください。たとえば、ビーコンをパッシブにリッスンしたり、プローブ リクエストを送信してアクティブにスキャンしたりできます。
上記は、従来の方法 (ioctl) と新しい方法 (netlink - cfg80211) があるため、コマンドをデバイスに送信するメカニズムを意図的に曖昧にしています。しかし、具体的な例を挙げるために、従来の方法を考えてみましょう。ioctl 呼び出しは WEXT モジュールに実装されていますが、このコマンドを処理するコードはデバイス ドライバーに実装されています。ユーザー空間アプリケーションが ioctl を作成すると、WEXT はデバイス ドライバーのハンドラーを検索して実行します。