Linux C: Obtenir de l'interface par défaut l'adresse IP de

Ma question est sur le code suivant (dans ce lien):

#include <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>

int main (int argc, const char * argv[]) {
    struct ifaddrs * ifAddrStruct = NULL;
    struct ifaddrs * ifa = NULL;
    void * tmpAddrPtr = NULL;

    getifaddrs(&ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (ifa ->ifa_addr->sa_family==AF_INET) { //Check it is
            //a valid IPv4 address
            tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer);
        }
        else if (ifa->ifa_addr->sa_family==AF_INET6) { //Check it is
            //a valid IPv6 address
            tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer);
        }
    }
    if (ifAddrStruct != NULL)
        freeifaddrs(ifAddrStruct);
    return 0;
}

De ce code de sortie ressemble à ceci:

lo IP Address 127.0.0.1
wlan0 IP Address 172.28.1.89 (I want to only this)
lo IP Address ::1
wlan0 IP Address fe80::6e71:d9ff:fe1d:b0

Comment puis-je obtenir de l'interface par défaut de l'adresse IP? (Vous pouvez donner une réponse avec un autre morceau de code.)

Il n'y a vraiment aucune une telle chose comme la valeur par défaut de la propriété intellectuelle. Le plus proche de la "valeur par défaut" pourrait être le nom d'hôte local et l'adresse associée, regardez gethostname
si je reçois le nom d'hôte avec gethostname et ensuite obtenir l'ip avec ce nom d'hôte, n'est-ce pas l'ip 127.0.0.1 ? mais je veux par défaut des interfaces adresse ip
Si votre nom d'hôte est à localhost, vous obtiendrez l'adresse 127.0.0.1. cf /etc/hosts. Vous pouvez effectuer une itération thru interfaces et de trouver une première qui n'est pas 127.0.0.1 et l'utiliser.

OriginalL'auteur Musher | 2013-07-28