Mac 网络类型识别
参考 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2015-01-27 django “如何”系列7:错误汇报
2015-01-27 django “如何”系列6:如何部署django
2015-01-27 django “如何”系列5:如何编写自定义存储系统