今天在CocoaChina上看到有人发帖在询问如何在Mac OSX下获得网卡的物理地址,恰好最近在学习IOKit的一些知识,所以通过IOKit的接口肯定是可以很方便的拿到MAC地址信息的,但不知道还有没有其它更方便的API了,所以我姑且贴出一段通过IOKit去获得网卡MAC地址的代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- (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)]; } //打印Mac地址 if (bsdName && macAddress) { NSLog(@"网卡:%@\nMac地址:%@\n",bsdName,macAddress); } } } IOObjectRelease(iterator);} |
时间: 2024-11-02 23:31:31