アクセスポイントの検索結果として取得できるNDIS_WLAN_BSSID_EXには NetworkTypeInUseというメンバがありますが、アドエスの場合は常に Ndis802_11OFDM24(11g)を返してくれるので役に立ちません。
でも正月に帰省先でボーっとテレビを観ていたとき、ふと SupportedRatesメンバの内容で判断できるのでは?と思いつきました。
SupportedRatesメンバには使用できる伝送レートがセットされているとの事。
11bで使用できる伝送レートは 1Mbps, 2Mbps, 5.5Mbps, 11Mbpsの 4種類。
11gはそれに加えて、9, 18, 36, 54, 6, 12, 24, 48Mbpsの合計12種類が使用できます。
SupportedRatesメンバに正しく値がセットされていれば、何種類の伝送レートが登録されているかを数えることで 11b, 11gの判定ができそうです。
INT iSupportedRatesCount = 0; for (INT i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) { if (0 == ndisBssid.SupportedRates[i]) { break; } iSupportedRatesCount ++; } switch (iSupportedRatesCount) { case 4: // 11b break; case 8: // 11aは 8種類(だった...と思う) break; case 12: // 11g break; default: // その他? break; }
WifiSwitcherに組み込んでみるとこんな感じ。
とりあえず正しく判定できているようです。
ただ この方法で取得できるのはアクセスポイントや自分自身のNICがサポートしている伝送レートなので、WifiInfoに組み込んで「現在のネットワーク種別」を取得することはできなさそうです。
やはり NetworkTypeInUseメンバに正しい値をセットして欲しいですよね。
5 件のコメント:
おぉWifiSwitcherの表示項目が増えてる!!
リリース待ってます。
しかとさん こんばんは。
表示項目は増えているのですが、怪しい動作はそのままです(笑
いっそのこと全面的に書き換えるかどうか悩み中です。
まず、上にも書いたように 11g,11bは SupportedRatesの数で推定しているので本当に合っているのか微妙です。
(11g/11a両対応や 11nは判定できません)
Auth欄も PeekPocketを参考にしましたが、本当に合っているのか確信が持てません。
W-ZERO3.org Uploaderにテスト版をアップしておきますので、もしよければ人柱お願います。
たまたま昨日見つけたアプリ&先ほどエントリーUPしたのですが、こんなものもありました。
http://www.codeplex.com/sniffthat
.NETアプリということと、GPS含めてちょっと方向が多機能?&少し不安定?(^^;で、ご参考になるかはわかりませんが、一応ソースも公開されているようでしたので。
人柱報告です。
コレガのCG-WLBARAG2相手で試しました。
全て表示のみで、実際の接続はおこなっていません。
設定:表示
a/b/g:g
a/b:b
a/g:g
b/g:g
b:b
認証方式(暗号方式):表示
OpenSystem(WEP):WEP
OpenSystem(無効):空白
SharedKey(WEP);WEP
WPA2-PSK(TKIP):WPA2
WPA2-PSK(AES):WPA2
WPA2-EAP(TKIP):WPA2
WPA2-EAP(AES):WPA2
WPA/WPA2-PSK(AES/TKIP):WPA
WPA/WPA2-PSK(AES):WPA
WPA/WPA2-EAP(AES/TKIP):WPA
WPA/WPA2-EAP(AES):WPA
あと、テスト中に一度だけMAC Addressの取得ミスが有りました。
こんばんは。
soliptさん>
情報ありがとうございます。
早速ソースを落としてみました。
基本的にはOpenNETCFの機能を利用しているみたいですね。
ちょうどGPSも気になっていたところなので、参考にさせてもらいます。
でも 結構なボリュームですね(笑
シューティングスターさん>
早速の人柱ありがとうございます(笑
a/gだと gになるんですね。
ちょっと小細工してみますので、また今度人柱お願いします。
MACアドレス取得失敗も気になります。
切り替えしないのであれば必要ない項目ですが、少し調べてみますね。
コメントを投稿