0
エンドユーザが理解できる名前のアクティブなネットワークインタフェースのリストを取得しようとしています。 en0
en5
の代わりに、システム環境設定にリストされている名前と同じです。ネットワークインタフェース名を変換
私はを使用している生のインターフェイスを持っていますが、それらを取得し、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);