如何以编程方式获取iOS设备的MAC地址

如何在应用程序中以编程方式获取iOS设备的MAC代码?

现在iOS 7设备 – 总是返回一个MAC地址为02:00:00:00:00:00。

所以最好使用[UIDevice identifierForVendor]

所以更好地调用这个方法来获得应用程序特定的唯一键

类别会更合适

 #import "UIDevice+Identifier.h" - (NSString *) identifierForVendor1 { if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { return [[[UIDevice currentDevice] identifierForVendor] UUIDString]; } return @""; } 

现在调用上面的方法来获得唯一的地址

 NSString *like_UDID=[NSString stringWithFormat:@"%@", [[UIDevice currentDevice] identifierForVendor1]]; NSLog(@"%@",like_UDID); 

您可以使用以下function获取MAC地址:

 +(NSString *)getMacAddress { int mgmtInfoBase[6]; char *msgBuffer = NULL; NSString *errorFlag = NULL; size_t length; // Setup the management Information Base (mib) mgmtInfoBase[0] = CTL_NET; // Request network subsystem mgmtInfoBase[1] = AF_ROUTE; // Routing table info mgmtInfoBase[2] = 0; mgmtInfoBase[3] = AF_LINK; // Request link layer information mgmtInfoBase[4] = NET_RT_IFLIST; // Request all configured interfaces // With all configured interfaces requested, get handle index if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0) errorFlag = @"if_nametoindex failure"; // Get the size of the data available (store in len) else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) errorFlag = @"sysctl mgmtInfoBase failure"; // Alloc memory based on above call else if ((msgBuffer = malloc(length)) == NULL) errorFlag = @"buffer allocation failure"; // Get system information, store in buffer else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0) { free(msgBuffer); errorFlag = @"sysctl msgBuffer failure"; } else { // Map msgbuffer to interface message structure struct if_msghdr *interfaceMsgStruct = (struct if_msghdr *) msgBuffer; // Map to link-level socket structure struct sockaddr_dl *socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1); // Copy link layer address data in socket structure to an array unsigned char macAddress[6]; memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6); // Read from char array into a string object, into traditional Mac address format NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]]; if(IsDEBUG) NSLog(@"Mac Address: %@", macAddressString); // Release the buffer memory free(msgBuffer); return macAddressString; } // Error... if(IsDEBUG) NSLog(@"Error: %@", errorFlag); return errorFlag; } 

但正如他所说的#Randomclik,从ios 7及以上版本无法使用mac地址。

形成苹果:

在iOS 7及更高版本中,如果您要求inputiOS设备的MAC地址,系统将返回值02:00:00:00:00:00。 如果您需要识别设备,请改用UIDevice的identifierForVendor属性。 (需要为自己的广告目的标识符的应用程序应考虑使用ASIdentifierManager的advertisingIdentifier属性。)

链接: https : //developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#//apple_ref/doc/uid/TP40013162-SW1

关于MAC地址的对话:

我怎样才能以编程方式获取iPhone的MAC地址

看来,在iOS 7和以后得到MAC地址将无法正常工作。 看看苹果的iOS文档有什么新function。 (已弃用的API部分)

大家好,build议使用官方的ios 7的方式,并使用[UIDevice identifierForVendor]

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

还要考虑从一些旧的假设中迁移出来。

你可以通过结合以下两个答案我猜。

首先,使用以下命令查找设备的ip:

https://stackoverflow.com/a/30754194/1089206

其次,find该地址的MAC,使用以下内容:

https://stackoverflow.com/a/31246085/1089206

我现在正在尝试,并会让你知道它是怎么回事。