【问题标题】:Objective-C: Get Default Gateway InformationObjective-C:获取默认网关信息
【发布时间】:2012-06-12 13:44:57
【问题描述】:

如何在 Objective-C 中获取我的默认网关 IP 和 MAC 地址?

现在,我可以创建一个函数来获取使用arpa/inet.h 的 IP,它工作正常,但我不知道如何获取默认网关 IP 和 MAC 地址。

NSString* GetMyIP(NSString* inf) {
    NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;

    // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces);
    if (success == 0)
    {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while(temp_addr != NULL)
        {
            if(temp_addr->ifa_addr->sa_family == AF_INET)
            {
                // Check if interface!
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:inf])
                {
                    // Get NSString from C String
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }

    freeifaddrs(interfaces);
    return address;
}

我使用了一段时间 arpnetstat,但它们并不总是按预期工作,而且您可能理解这些解决方案存在风险......

还有其他“Apple 方式”来获取此类信息吗?不使用arpa/inet.h?例子?

谢谢。

【问题讨论】:

    标签: objective-c c mac-address gateway inet


    【解决方案1】:

    This answer 解释了如何在 OSX 上获取接口的 MAC 地址。

    默认网关在路由表中注册 - 不直接与网络接口关联。请注意,默认网关(即 0.0.0.0 的网关)可能不是您需要关心的唯一一个,可能会有路由器设置为更受限制的地址范围。 (另外,可能有多个网关,默认或其他,具有不同的优先级)

    路由表记录在 route(4) manpage 中 - 希望它可以为您提供足够的信息来检索应用程序中的路由表。

    【讨论】:

    • 我正在寻找我的默认网关 MAC,而不是我自己的...无论如何,谢谢。
    • 啊,我明白了。一旦你有了网关的 IP,你确实需要通过 ARP。
    • 我注意到在终端上,arp 给了我一个与路由器报告的 MAC 不同的 MAC……奇怪:S.
    • 路由器至少有两个不同的MAC地址,每个接口一个。 Wifi路由器通常有3个:一个用于WAN接口,一个用于有线LAN接口,一个用于Wifi接入点。确保您查看的是正确的。
    • 我正在使用 dd-wrt,System Information 页面上的 MAC 地址都不是终端上 arp 报告的地址。我想这可能是路由器的问题......但我会尽快与其他人一起尝试。谢谢!
    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多