ios - en0 会一直是 iOS 设备上的 Wi-Fi 吗?

标签 ios network-programming ip

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

最佳答案

我使用以下内容通过查找具有 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 设备。

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

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

关于ios - en0 会一直是 iOS 设备上的 Wi-Fi 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104279/

相关文章:

java - 根据用户输入的 java 动态选择两个网卡的 IP 地址,以及演示连接

java - 如何让 Hadoop 服务器监听所有 IP

iphone - 像 0xD2691E 这样的十六进制值的数据类型是什么?

ios - 如何更新现有的.plist?

linux - 为什么正常调用 if_freenameindex 会双重释放 if_nameindex?

powershell - 在Powershell中查找外部IP地址和日志地址号?

ios - 如何从另一个 Controller 加载 xib 文件而不使用 segue 并且不作为 subview

ios - 边栏声明

c - 如何修复找不到 `getaddrinfo` 定义的问题?

检查网络掩码是否正确