Macos 转换网络接口名称
我正在尝试获取一个具有最终用户可理解名称的活动网络接口列表。类似于系统首选项中列出的名称,而不是Macos 转换网络接口名称,macos,cocoa,Macos,Cocoa,我正在尝试获取一个具有最终用户可理解名称的活动网络接口列表。类似于系统首选项中列出的名称,而不是en0en5 我有使用getifaddrs的原始接口,但无法找到如何获取这些接口并获得Ethernet或Wifi的系统名称 有人知道怎么做吗?这是给macOS的 我现在所拥有的: struct ifaddrs *ifap; if( getifaddrs(&ifap) == 0 ){ struct ifaddrs *interface; for
en0
en5
我有使用getifaddrs
的原始接口,但无法找到如何获取这些接口并获得Ethernet
或Wifi
的系统名称
有人知道怎么做吗?这是给macOS的
我现在所拥有的:
struct ifaddrs *ifap;
if( getifaddrs(&ifap) == 0 ){
struct ifaddrs *interface;
for (interface = ifap; interface != NULL; interface = interface->ifa_next) {
unsigned int flags = interface->ifa_flags;
struct sockaddr *addr = interface->ifa_addr;
// Check for running IPv4, IPv6 interfaces. Skip the loopback interface.
if ((flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING)) {
if (addr->sa_family == AF_INET || addr->sa_family == AF_INET6) {
// Convert interface address to a human readable string:
char host[NI_MAXHOST];
getnameinfo(addr, addr->sa_len, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
printf("interface:%s, address:%s\n", interface->ifa_name, host);
// MAGIC HERE TO CONVERT ifa_name to "Ethernet" or something
}
}
}
freeifaddrs(ifap);
这可以通过macOS上的系统配置实现。在Objective-C中,如下所示:
CFArrayRef ref = SCNetworkInterfaceCopyAll();
NSArray* networkInterfaces = (__bridge NSArray *)(ref);
for(int i = 0; i < networkInterfaces.count; i += 1) {
SCNetworkInterfaceRef interface = (__bridge SCNetworkInterfaceRef)(networkInterfaces[i]);
CFStringRef displayName = SCNetworkInterfaceGetLocalizedDisplayName(interface);
CFStringRef bsdName = SCNetworkInterfaceGetBSDName(interface);
NSLog(@"Name:%@ \ninterface: %@\nbsd:%@",displayName, SCNetworkInterfaceGetInterfaceType(interface), bsdName);
}
CFArrayRef ref=SCNetworkInterfaceCopyAll();
NSArray*网络接口=(uu桥NSArray*)(参考);
对于(int i=0;i
本地化显示名称类似于display Ethernet
或WiFi
,BSD名称类似于en5
,允许与上述代码匹配
这种方法在iOS上不起作用,但iOS上实际上没有任何其他配置