我正在尝试使用getifaddrs()
在iOS设备上获取wifi接口的IP地址并搜索en0
名称。这工作正常,但它假设en0
始终是Wi-Fi。是否有某种方法可以确保我查询的界面是专门用于未来验证的Wi-Fi?
答案 0 :(得分:1)
我通过查找具有用于wifi站的BSSID的设备来使用以下内容来查找wifi信息。它还有一个SSID。
以下类方法仅返回wifi信息字典。这是一个简单的扩展,也可以返回设备标签(ifname
变量)。正如你所注意到的那样,它通常是en0,但这可以作为一种确保你拿起wifi的方法,如果它未来不是en0。
+ (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 由于未检测到wifi,因此在iOS模拟器中返回nil,因此在测试时需要一些解决方法代码来满足您的需求。
hacky选项是找到关联MAC为02:00:00:00:00:00
的IP地址。 iOS隐藏了编码器的MAC地址,它具有此值。