3

Ubuntu Linux 12.04 環境で WiFi ツールを開発しており、異なるチャネル間で WiFi インターフェイスを切り替える必要があります。

現在、ws80211_set_freqという関数のWiresharkソースコードws80211_utils.cで解決策を見つけましたが、それをソースコードに実装する方法、含めるライブラリ、およびテストできるようにコンパイルする方法がわかりません。

問題は、使用しなければならない引数とフラグが多すぎることです。また、netlink wifi ツールを開発するのはこれが初めてです。

どこから始めて、WiFi の netlink 呼び出しをどのように使用するかについての適切なマニュアルがある場合は、そのリンクを提供してください。

どうもありがとうございます!

4

2 に答える 2

8

現在の Linux バージョンでは、nl80211がワイヤレス サブシステムと「対話」する正しい方法です。すべてのドライバーとすべての動作モード (マスター、クライアント、モニターなど) でチャネルを任意に設定することはできないことに注意してください。一部のドライバーでは、対応するインターフェイスが「ダウン」している場合にのみチャネルの変更が許可されます。クライアント (「マネージド」) などのモードでは、チャネルはアクセス ポイントによって定義されるため、まったく設定できません。

また、すべてのワイヤレス デバイス ドライバが mac80211/cfg80211 を使用しているわけではないことにも注意してください。それを使用していないドライバーについては、古いワイヤレス拡張 API を使用するか、(さらに悪いことに) ドライバー固有の独自の API を使用する必要があります。

残念ながら、nl80211 インターフェースに関する最新の完全なドキュメントはないようです。私が間違っている場合は、私を修正してください!

他のプログラムのソース コードを調べるというあなたのアプローチは、合理的な方法のようです。コマンド ライン ユーティリティのソース コードを使用することもできます。チャンネルを設定するオプションがあります:iwiw

$ iw --help
Usage:  iw [options] command
Options:
    --debug     enable netlink debugging
    --version   show version (3.2)
Commands:
…
dev <devname> set channel <channel> [HT20|HT40+|HT40-]
…

iwのphy.cの91ff行目。が実行されたときに呼び出されるコードを見つけることができますiw wlan0 set channel。ただし、このコードは明らかに読みにくいものです。属性NL80211_CMD_SET_WIPHYと組み合わせたコマンドが良いよう です。NL80211_ATTR_WIPHY_FREQ

このSO 回答では、nl80211 を使用するためのスケルトン プログラムを見つけることができます。また、Aircrack-ng ( src/osdep/linux.c, 関数linux_set_channel_nl80211) のコードは設計図として機能する可能性があります。

于 2014-03-02T16:55:34.773 に答える