标签:__ bridge name Mac 网络 NSString interface 识别 ref
参考 https://www.jianshu.com/p/6ce77a584a3e ,解决了变量释放的问题,实现版本如下
- 获取目前使用的网络接口的名称
- 遍历所有网络接口,找到使用的那一个
- 判断网络接口的协议和展示明显,判定是有线(ethernet)还是Wi-Fi
void GetNetworkTyep(std::string& network_type) { NSString *use_interface = @""; { SCDynamicStoreRef ds = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("myApplication"), NULL, NULL); // ipv6 CFPropertyListRef dr6 = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv6")); // ipv4 CFPropertyListRef dr4 = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv4")); if (dr6) { use_interface = [(NSDictionary *)CFBridgingRelease(dr6) valueForKey:@"PrimaryInterface"]; } else if(dr4) { use_interface = [(NSDictionary *)CFBridgingRelease(dr4) valueForKey:@"PrimaryInterface"]; } CFRelease(ds); } CFArrayRef ref = SCNetworkInterfaceCopyAll(); for(id item in (__bridge NSArray *)(ref)) { SCNetworkInterfaceRef interface_ref = (__bridge SCNetworkInterfaceRef)(item); // for example : Wi-Fi || AX88772A CFStringRef display_name = SCNetworkInterfaceGetLocalizedDisplayName(interface_ref); // for example : Ethernet || IEEE80211 || Bridge CFStringRef interface_name = SCNetworkInterfaceGetInterfaceType(interface_ref); // for example : en[0-9] bridge[0-9] CFStringRef bsd_name = SCNetworkInterfaceGetBSDName(interface_ref); NSString *name = [NSString stringWithString:(__bridge NSString *)display_name]; NSString *interface = [NSString stringWithString:(__bridge NSString *)interface_name]; NSString *bsd = [NSString stringWithString:(__bridge NSString *)bsd_name]; if ([bsd isEqualToString:use_interface]) { if ([interface containsString:@"Ethernet"]) { network_type = "Ethernet"; } else if ([interface containsString:@"802"] || [name containsString:@"Wi-Fi"]) { network_type = "Wi-Fi"; } } blog(LOG_INFO, "network type :%s*%s*%s %s", name.UTF8String, interface.UTF8String, bsd.UTF8String, network_type.c_str()); } CFRelease(ref); }
p
标签:__,bridge,name,Mac,网络,NSString,interface,识别,ref 来源: https://www.cnblogs.com/qwj-sysu/p/15851034.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。