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
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
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
Vous devez vous connecter pour publier un commentaire.
Ce code va faire la chose:
Résultat:
Alternativement, vous pouvez également utiliser un masque d'adresse IP. Par exemple, c'est l'impression que si le masque est différent de 255.0.0.0 (loopback masque)
Résultat:
Je n'ai pas la prétention de couvrir toutes les possibilités. je voulais juste donner n'importe quelle direction
OriginalL'auteur 4pie0
Une méthode qui couvre plus des situations qui impliquent quelque chose comme ceci:
getifaddrs
) pour déterminer l'adresse IP de cette interface.La route de l'analyse du fichier peut ressembler à ceci (code C++ pour des raisons de concision):
Puis, dans votre code, dans le
for
boucle d'itération sur laifAddrStruct
structs, vous pouvez ajouter un test pourifa->ifa_name
à ladefaultInterface
déterminé ci-dessus.OriginalL'auteur Ionut