gpt4 book ai didi

iPhone在哪些情况下无法获取mac地址成功?

转载 作者:可可西里 更新时间:2023-11-01 04:59:49 25 4
gpt4 key购买 nike

使用下面的方法,99.5%的情况下都能正常工作,但是AppStore中很少有用户反射(reflect)无法获取mac地址(我们使用identifier进行认证每次服务器调用)。

失败案例基于 iPhone 4S,IOS 版本为 5.0.1。

你知道在什么情况下(除了低内存)它会失败吗?

/* Original source code courtesy John from iOSDeveloperTips.com */

#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>

- (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]];
NSLog(@"Mac Address: %@", macAddressString);

// Release the buffer memory
free(msgBuffer);

return macAddressString;
}

// Error...
NSLog(@"Error: %@", errorFlag);

return errorFlag;
}

非常感谢任何帮助。

最佳答案

我在将 iPhone 升级到 iOS 5 后遇到了这样的情况,问题是臭名昭著的 wifi 错误。你不会喜欢这个答案,但唯一的解决办法是将设备带回 Apple 并获得一台可以正常工作的新设备。可以将代码更改为在 mac 地址查找失败时不会崩溃,但是当 REST 调用需要唯一标识符时,这无济于事。作为开发人员,您进退两难。

关于iPhone在哪些情况下无法获取mac地址成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13302946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com