【问题标题】:Getting ARP table on iPhone/iPad always return nil the MAC在 iPhone/iPad 上获取 ARP 表总是返回 nil MAC
【发布时间】: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


    【解决方案1】:

    我找到了解决办法。

    u_long addr = inet_addr(c); 改变 in_addr_t addr = inet_addr(c);

    【讨论】:

    • 您介意提供完整的代码 sn-p 吗?我现在也有这个问题,但上面的行不是一个完整的解决方案。提前致谢!
    • const char *c = [ipAddress UTF8String]; u_long addr = inet_addr(c);// 改变 in_addr_t addr = inet_addr(c); NSString *mac = [self ip2mac:addr]; // 调用方法.... ip2mac 方法代码在上面...如果您需要什么,请告诉我,我会尽力帮助您
    【解决方案2】:

    这在 iOS 8 中已更改,因此 MAC 地址无法再访问。

    【讨论】:

    • 嗨大卫,昨天当我第一次尝试时......效果很好......在加入 cocoaPods 之前......后来没有恢复工作。我的设备有 8.2 版
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2017-03-28
    • 2015-03-05
    • 2014-08-25
    • 2016-05-17
    相关资源
    最近更新 更多