それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WiFi のチャンネルを指定して接続。無理だった

同一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;
}

出来なかった。

結論、出来なかった。

追調査した

同じこと考えてる人が居た。コマンドサンプルや、コードがあったのでうごかしてみた→ダメ

GitHub - qpSHiNqp/airport-bssid: If you want to get associated to a specific bssid with Mac OS, use this one.

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のつかいかたがわるいんだろうか。。。現状は無理だった。残念。