Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 转换网络接口名称_Macos_Cocoa - Fatal编程技术网

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上实际上没有任何其他配置