今天在CocoaChina上看到有人发帖在询问如何在Mac OSX下获得网卡的物理地址,恰好最近在学习IOKit的一些知识,所以通过IOKit的接口肯定是可以很方便的拿到MAC地址信息的,但不知道还有没有其它更方便的API了,所以我姑且贴出一段通过IOKit去获得网卡MAC地址的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { kern_return_t kr; CFMutableDictionaryRef matchDict; io_iterator_t iterator; io_registry_entry_t entry; matchDict = IOServiceMatching("IOEthernetInterface"); kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchDict, &iterator); NSDictionary *resultInfo = nil; while ((entry = IOIteratorNext(iterator)) != 0) { CFMutableDictionaryRef properties=NULL; kr = IORegistryEntryCreateCFProperties(entry, &properties, kCFAllocatorDefault, kNilOptions); if (properties) { resultInfo = (__bridge_transfer NSDictionary *)properties; NSString *bsdName = [resultInfo objectForKey:@"BSD Name"]; NSData *macData = [resultInfo objectForKey:@"IOMACAddress"]; if (!macData) { continue; } NSMutableString *macAddress = [[NSMutableString alloc] init]; const UInt8 *bytes = [macData bytes]; for (int i=0; i<macData.length; i++) { [macAddress appendFormat:@"%02x",*(bytes+i)]; }
|