iOS 记录之 获取设备网络信息

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanglei3kyou/article/details/50434848

简述

在特定App的开发中,有的时候需要得到当前设备的网络信息,如Wifi 名,Mac物理地址等。而苹果提供了相关的原生API。


相关代码

- (NSString *)getWifiName {
    NSString *wifiName = nil;
    CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();
    if (!wifiInterfaces) {
        return nil;
    }
    
    NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;
    for (NSString *interfaceName in interfaces) {
        CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));
        if (dictRef) {
            NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;
            wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
            CFRelease(dictRef);
        }
    }
    CFRelease(wifiInterfaces);
    return wifiName;
}

研究

1. 用系统原生API获取当前设备处于激活状态的网络接口信息(CNCopyCurrentNetworkInfo)数组。

CNCopySupportedInterfaces (官方给出的相关信息)

/*!
 @function CNCopySupportedInterfaces
 @discussion copies a list of all interfaces CaptiveNetworkSupport is monitoring.
 @result An array of CFStringRef- BSD interface names.
	 Returns NULL if an error was encountered.
	 You MUST release the returned value.
 */

2. 将 CNCopyCurrentNetworkInfo 转换成相应字典,获取相关信息。

CNCopyCurrentNetworkInfo (官方给出的相关信息)

/*!
 @function CNCopyCurrentNetworkInfo
 @discussion Returns the Network Info for the specified interface.
	For example, Network Info dictionary will contain the following
	keys, and values:
	<pre>
	@textblock
	Keys                      : Values
	=======================================
	kCNNetworkInfoKeySSIDData : CFDataRef
	kCNNetworkInfoKeySSID     : CFStringRef
	kCNNetworkInfoKeyBSSID    : CFStringRef
	@/textblock
	</pre>
 @param interfaceName Name of the interface you are interested in
 @result Network Info dictionary associated with the interface.
	 Returns NULL if an error was encountered.
	 You MUST release the returned value.
 */

kCNNetworkInfoKeySSID  
SSID是 Service Set Identifier 的缩写,意思是:服务集标识。SSID技术可以将一个无线局域网分为几个需要不同身份验证的子网络,每一个子网络都需要独立的身份验证,只有通过身份验证的用户才可以进入相应的子网络,防止未被授权的用户进入本网络。简单说,SSID就是一个局域网的名称。


kCNNetworkInfoKeyBSSID
BSSID,一种特殊的Ad-hoc LAN的应用,也称为 Basic Service Set (BSS) ,一群计算机设定相同的BSS名称,即可自成一个group。每个BSS都会被赋予一个BSSID,它是一个长度为48位的二进制标识符,用来识别不同的BSS。其的主要优点是它可以作为过滤之用。BSSID 是指站点的 MAC 地址。

3. 由于上述代码中部分变量实例是以 CF 开头,ARC中尚未对此支持自动引用计数,需要进行相应的手动内存释放。


注意

1. 上述代码需要在真机下运行,模拟器下 CNCopySupportedInterfaces 返回为空。

展开阅读全文

没有更多推荐了,返回首页