【发布时间】:2015-04-14 02:45:03
【问题描述】:
各位,我需要帮助... 我正在尝试按照这些链接恢复 mac Getting ARP table on iPhone/iPad How do I query the ARP table on iPhone? 我的测试只有一次正确...... 我的代码没有改变,只是我包含了 AFNetworking 的 cocoaPods。 当我再次测试时,总是失败……mac总是为零……mi ip是正确的 我的代码是:
const char *c = [ipAddress UTF8String];
u_long addr = inet_addr(c);
NSString *mac = [self ip2mac:addr ];
- (NSString*)ip2mac:(in_addr_t)addr{
NSString *ret = nil;
size_t needed;
char *buf, *next;
struct rt_msghdr *rtm;
struct sockaddr_inarp *sin;
struct sockaddr_dl *sdl;
int mib[6];
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
mib[3] = AF_INET;
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;
if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &needed, NULL, 0) < 0)
err(1, "route-sysctl-estimate");
if ((buf = (char*)malloc(needed)) == NULL)
err(1, "malloc");
if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), buf, &needed, NULL, 0) < 0)
err(1, "retrieval of routing table");
for (next = buf; next < buf + needed; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)next;
sin = (struct sockaddr_inarp *)(rtm + 1);
sdl = (struct sockaddr_dl *)(sin + 1);
if (addr != sin->sin_addr.s_addr || sdl->sdl_alen < 6)
continue;
u_char *cp = (u_char*)LLADDR(sdl);
ret = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]];
break;
}
free(buf);
return ret;
}
只出现一次... for (next = buf; next rtm_msglen)
所需的大小始终为 128.... 如果把作业 ret = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", cp[0]、cp[1]、cp[2]、cp[3]、cp[4]、cp[5]]; 前 if (addr != sin->sin_addr.s_addr || sdl->sdl_alen
谢谢大家
【问题讨论】:
标签: ios objective-c iphone ipad