【问题标题】:Will en0 always be Wi-Fi on an iOS device?在 iOS 设备上,en0 是否始终是 Wi-Fi?
【发布时间】:2015-11-13 06:30:31
【问题描述】:

我正在尝试使用 getifaddrs() 并搜索 en0 名称来获取 iOS 设备上 wifi 接口的 IP 地址。这工作正常,但它假定 en0 始终是 Wi-Fi。有什么方法可以确保我查询的接口是专门用于未来验证的 Wi-Fi?

【问题讨论】:

  • 不,并非总是如此。例如考虑一个旧的pre-wifi macbook。这取决于 EFI 固件和/或 IOS 如何枚举设备。 en0 很可能是有线以太网端口,而 en1 很可能是 wifi。

标签: ios network-programming ip


【解决方案1】:

我使用以下方法通过查找具有 wifi 站 BSSID 的设备来查找 wifi 信息。它还将有一个 SSID。

以下类方法仅返回 wifi 信息字典。它是一个简单的扩展,还返回设备标签(ifname 变量)。正如您所指出的,它通常是 en0,但如果将来它不是 en0,这将作为确保您拿起 wifi 的一种方式。

+ (NSDictionary *)getWifiInfo {
    NSDictionary *ret=nil;

    // Get the supported interfaces.
    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();

    // Find one with a BSSID and return that. This should be the wifi.
    for (NSString *ifnam in ifs) {
        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

        NSLog(@"Network device found = %@", info.description);

        if (info[(__bridge NSString *)kCNNetworkInfoKeyBSSID]) {
            // Return this as it should be the right one given it has a MAC address for the station
            ret=info;
        }
    }

    NSLog(@"Exit: returning wifi info = %@", ret.description);

    return ret;
}

一旦你有了基于 BSSID 的设备标签,你就可以使用getifaddrs 来获取它的 IP、网关等,知道它是 wifi 设备。

NB这会在 iOS 模拟器中返回 nil,因为没有检测到 wifi,因此为了进行测试,您需要一些解决方法代码来满足您的需求。

一个 hacky 选项是找到关联 MAC 为02:00:00:00:00:00 的 IP 地址。 iOS 对编码器隐藏了 MAC 地址,它有这个值。

【讨论】:

  • 这个答案的一个问题是 CaptureNetwork 在 iOS 9 中已被弃用。
  • @codecaffeine 哎哟。没有意识到这一点。我正在完成的应用程序依赖 BSSID 来识别同一网络上的不同接入点。更糟糕的是,这里不推荐使用意味着已过时,超出了对编译/链接的支持!!!似乎另一种选择是使用[NEHotspotHelper supportedNetworkInterfaces],但这需要某种形式的批准,而且不容易获得。
  • @codecaffeine 论坛上似乎正在进行一场有趣的对话,并收到了来自 Apple 的一些反馈。迹象表明它正在讨论中,但他们还没有说任何具体的内容。似乎有很多不开心的程序员。见forums.developer.apple.com/message/31340
  • @codecaffeine 仅供参考,看起来 iOS9 GM 放回了该功能,尽管仍标记为已弃用。 Apple 已要求人们在缺陷中提出他们的用例。请参阅上一个论坛链接。
  • ...这里使用的 CaptiveNetwork 功能仍然适用于 iOS 10
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2012-09-07
  • 2011-09-29
  • 2013-08-16
  • 2013-10-04
  • 1970-01-01
  • 2017-07-10
相关资源
最近更新 更多