同一SSIDが複数チャンネルで跳んでることがあります。
softbank とか docomo とか、複数チャンネル電波が飛んでますよね。
街ナカだと、みんなが、優先して電波強い(RSSI)のいいところにつなごうとして、DHCPの応答待ちでコリジョンが起こって全然接続がダメになる。
でも、5Ghz とか空いてそうだし、同じくらいのRSSIで、別のAPがあるわけです。
チャンネルを指定して接続できないのか。
だったら、チャンネルを指定して、そのチャンネルのAPに接続できないのか。
もしできるとしたら、家庭内で、同一ESSIDでWiFiエリアを作っている時に電波の到達状況や速度をパパッと調べるのに便利そうじゃん。
コード書いてみた。
// // main.m // airport-channel-selector // // Created by takuya on 20160308. // Copyright © 2016年 takuya. All rights reserved. // #import <Foundation/Foundation.h> #import <CoreWLAN/CoreWLAN.h> int main(int argc, const char * argv[]) { @autoreleasepool { CWInterface *interface = [[CWInterface alloc] initWithInterfaceName:@"en0"]; NSSet *list = [interface scanForNetworksWithName:@"my_test_ESSID" error:nil]; CWNetwork *target ; int target_channel = 1; for ( CWNetwork *cwn in list.allObjects){ if ((int)cwn.wlanChannel.channelNumber == target_channel ){ target = cwn; } } printf("%s %s %d \n",target.ssid.UTF8String, target.bssid.UTF8String, (int)target.wlanChannel.channelNumber); [interface disassociate]; [interface associateToNetwork:target password:@"PASSWORD" error:nil]; NSLog(@"END"); } return 0; }
出来なかった。
結論、出来なかった。
追調査した
同じこと考えてる人が居た。コマンドサンプルや、コードがあったのでうごかしてみた→ダメ
Connect to a WiFi network by BSSID, instead of network name? : OSXTweaks
osx - How do you force a 5 GHz wifi connection? - Ask Different
結論。osx 10.6あたりでもう無理
昔の投稿を見る限り、当時はできたっぽい。いまはオプションも動作しないし、直接CWInterfaceを使って無理だったってことはたぶん無理。
CWInterfaceのつかいかたがわるいんだろうか。。。現状は無理だった。残念。