clinuxnetwork-interface

Linux getting all network interface names


I need to collect all the interface names, even the ones that aren't up at the moment. Like ifconfig -a.

getifaddrs() is iterating through same interface name multiple times. How can I collect all the interface names just once using getifaddrs()?


Solution

  • You could check which entries from getifaddrs belong to the AF_PACKET family. On my system that seems to list all interfaces:

    struct ifaddrs *addrs,*tmp;
    
    getifaddrs(&addrs);
    tmp = addrs;
    
    while (tmp)
    {
        if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_PACKET)
            printf("%s\n", tmp->ifa_name);
    
        tmp = tmp->ifa_next;
    }
    
    freeifaddrs(addrs);