From ea40cfba4dc5d169cccc33ea7ebcef542de3df84 Mon Sep 17 00:00:00 2001 From: HappyZ Date: Sat, 25 Feb 2017 00:29:10 -0800 Subject: [PATCH] MacBook pro supports up to 802.11n w/ 40MHz channel width.. --- osx_as_ap/Makefile | 7 +++ osx_as_ap/osx_as_ap | Bin 0 -> 13204 bytes osx_as_ap/osx_as_ap.m | 139 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 osx_as_ap/Makefile create mode 100755 osx_as_ap/osx_as_ap create mode 100644 osx_as_ap/osx_as_ap.m diff --git a/osx_as_ap/Makefile b/osx_as_ap/Makefile new file mode 100644 index 0000000..af503c9 --- /dev/null +++ b/osx_as_ap/Makefile @@ -0,0 +1,7 @@ +all: osx_as_ap + +osx_as_ap: osx_as_ap.m + clang -framework Foundation -framework CoreWLAN -o $@ $< + +clean: + rm -rf osx_as_ap diff --git a/osx_as_ap/osx_as_ap b/osx_as_ap/osx_as_ap new file mode 100755 index 0000000000000000000000000000000000000000..ea1a62da7aeeb64c6507707d1682970563b4866a GIT binary patch literal 13204 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 literal 0 HcmV?d00001 diff --git a/osx_as_ap/osx_as_ap.m b/osx_as_ap/osx_as_ap.m new file mode 100644 index 0000000..ec45ccd --- /dev/null +++ b/osx_as_ap/osx_as_ap.m @@ -0,0 +1,139 @@ +/** + * This is modified based on https://gist.github.com/magnetoz/2329e0912b1386fc063d6ac902289d5e + * Macbook Pro only supports 802.11n 40MHz mode at max.. so disappointed + **/ + +#import +#import + +int main(int argc, char* argv[]) { + @autoreleasepool { + int ch; + NSString *ssid = nil, *password = nil; + NSInteger selected_channel = 44; // default is channel 9, 2.4GHz + NSInteger selected_channel_width = 3; // channel 40MHz is in used + + while((ch = getopt(argc, argv, "s:p:c:w:h")) != -1) { + switch(ch) { + case 's': + ssid = [NSString stringWithUTF8String:optarg]; + break; + case 'p': + password = [NSString stringWithUTF8String:optarg]; + break; + case 'c': + selected_channel = [[NSString stringWithUTF8String:optarg] integerValue]; + // printf("result: %lu\n", channel); + break; + case 'w': + selected_channel_width = [[NSString stringWithUTF8String:optarg] integerValue]; + break; + case '?': + case 'h': + default: + printf("USAGE: %s [-s ssid] [-p password] [-h] command\n", argv[0]); + printf("\nOPTIONS:\n"); + printf(" -s ssid SSID\n"); + printf(" -p password WEP password\n"); + printf(" -c channel channel index\n"); + printf(" -w width channel width (1, 2, 3 for 20, 40, 80MHz)\n"); + printf(" -h Print help\n"); + printf("\nCOMMAND:\n"); + printf(" status Print interface mode\n"); + printf(" start Start Host AP mode\n"); + printf(" stop Stop Host AP mode\n"); + return 0; + } + } + + NSString *command = nil; + if(argv[optind]) { + command = [NSString stringWithUTF8String:argv[optind]]; + } + CWWiFiClient *wfc = CWWiFiClient.sharedWiFiClient; + CWInterface *iface = wfc.interface; + + + if(!command || [command isEqualToString:@"status"]) { + NSString *mode = nil; + switch(iface.interfaceMode) { + case kCWInterfaceModeStation: + mode = @"Station Mode"; + break; + case kCWInterfaceModeIBSS: + mode = @"IBSS Mode"; + break; + case kCWInterfaceModeHostAP: + mode = @"HostAP Mode"; + break; + case kCWInterfaceModeNone: + default: + mode = @"None"; + } + printf("%s\n", [mode UTF8String]); + } else if([command isEqualToString:@"stop"]) { + // Stop Host AP mode + if(getuid() != 0) { + printf("this may need root (trying anyway)...\n"); + } + objc_msgSend(iface, @selector(stopHostAPMode)); + } else if([command isEqualToString:@"start"]) { + if(!ssid) { + printf("error: an ssid must be specified\n"); + return 1; + } + + // known security types: + // 0b10: 2: no securiry + // 0b10000: 16: wep + // Note: values [-127..127] have been tried, and all but these return errors. + // 0b10000000: 128: nothing? need to check + int securityType = 2; + if(password) { + if([password length] < 10) { + printf("error: password too short (must be >= 10 characters)\n"); + return 1; + } + securityType = 16; + } + + NSSet *chans = [iface supportedWLANChannels]; + // printf("chan count: %lu\n", [chans count]); + + NSEnumerator *enumerator = [chans objectEnumerator]; + CWChannel *channel; + while ((channel = [enumerator nextObject])) { + printf("channel: %lu; channel band: %lu\n", [channel channelNumber], [channel channelWidth]); + // change to + if ([channel channelNumber] == selected_channel + && [channel channelWidth] == selected_channel_width) + break; + } + + if (channel == nil) { + printf("channel not found\n"); + return 1; + } + // return 0; + + // Start Host AP mode + NSError *error = nil; + objc_msgSend(iface, + //@selector(startIBSSModeWithSSID:security:channel:password:error:), + @selector(startHostAPModeWithSSID:securityType:channel:password:error:), + //[@"hunter2" dataUsingEncoding:NSUTF8StringEncoding], + [ssid dataUsingEncoding:NSUTF8StringEncoding], + securityType, + channel, + // @"abc123ffff", + password, + &error); + if(error) { + printf("startHostAPModeWithSSID error: %s\n", [error.localizedDescription UTF8String]); + return 1; + } + } + + return 0; + } +} \ No newline at end of file