2009-05-29 33 views
5

iwlistコマンドがLinuxで利用可能なワイヤレスネットワークをスキャンする方法を知りたい。私はソースコードを読んで、SIOCSIWSCANを使ってスキャンをトリガし、SIOCGIWSCANを使ってスキャン結果を取得するioctlコールがありました。しかし、これらのシステムコールによってビーコンフレームがどのようにキャプチャされ、分析されるのでしょうか?iwlist()コマンドはどのように無線ネットワークをスキャンしますか?

答えて

10

iwlist(8)他のワイヤレスツールは、Linux Wireless Extensions(WEXT)をサポートする異なるワイヤレスデバイスドライバに共通のフロントエンドを提供します。各ドライバは、このインタフェースで定義されたデバイス固有の操作を実装するWEXTにハンドラを登録します。スキャンの場合、2つのハンドラはトリガスキャン(コマンドSIOCSIWSCAN)とスキャン結果の取得(コマンドSIOCGIWSCAN)です。デバイスがスキャンを完了した後、デバイスはnetlinkインターフェイスを介してWOCTにSIOCGIWSCANイベントを送信します。このソケットをリッスンするアプリケーションは、SIOCGIWSCANコマンドを発行して、デバイスからスキャン結果を取得できます。デバイスはスキャンの実装方法を自由に選択できることに注意してください。例えば、受動的にビーコンを聞くことができ、プローブ要求を送信することによって積極的にスキャンすることができる。

これは伝統的な方法(ioctl)と新しい方法(netlink - cfg80211)があるため、コマンドをデバイスに送信する仕組みについては漠然としています。しかし、具体的な例を取るために、従来の方法を考えてみましょう。 ioctl呼び出しはWEXTモジュールで実装されていますが、このコマンドを処理するコードはデバイスドライバに実装されています。ユーザー空間アプリケーションがioctlを作成すると、WEXTはデバイスドライバのハンドラをルックアップして実行します。

+0

入手しましたioctl呼び出しはドライバのモジュールに実装されているため、SIOCGIWSCANを使用してioctlを実際に呼び出すと、ドライバのモジュールで定義された関数が呼び出されます。 –

関連する問題