Nom de l'adaptateur de bouclage sous Linux
-
06-07-2019 - |
Question
Est-il prudent de supposer que la carte réseau en boucle sur un système Linux sera toujours appelée "lo" - s'agit-il simplement d'une convention de dénomination qui peut ne pas être respectée, ou doit-il toujours en être ainsi?
La solution
Je ne connais aucun système Linux doté d'une interface de bouclage autre que lo
. Je m'appuierais sur cette convention de dénomination si j'écris un script spécifique au système, mais pas lors de l'écriture d'un programme portable. Par exemple, le bouclage dans OSX est lo0
.
Un moyen fiable en C d’appeler un SIOCGIFCONF
ioctl
sur une socket, itère sur les interfaces, appelle SIOCGIFFLAGS
ioctl
sur chaque interface et en vérifiant quelles interfaces ont un jeu d'indicateurs IFF_LOOPBACK
(voir /usr/include/linux/if.h
).
SIOCGIFCONF
vous donnera également les noms d'interface.
Autres conseils
D'après mon expérience, il s'agit d'un nom commun, même si vous ne devriez pas toujours lui faire confiance. Peut-être qu’énumérer les interfaces et rechercher celle avec une adresse de 127.0.0.1 serait la solution?
C’est une convention assez ancienne. En fait, je n’ai pas encore vu de distribution / distribution Linux qui ne l’appelle pas «lo».
Cependant, les noms de périphérique dans les systèmes * nix sont si variés qu'on peut supposer qu'ils vont changer. Utilisez les normes si vous voulez la portabilité (dans ce cas, 127.0.0.1).
Les interfaces peuvent être renommées à votre guise - mais toute personne qui renommera l’interface de bouclage est extrêmement ridicule et mérite d’avoir un système inutilisable:)
Oui, vous pouvez énumérer les interfaces et obtenir leurs noms. Mais il est peut-être aussi facile de supposer que cela va être "lo".
Utiliser 127.0.0.1 est probablement le moyen le plus sûr d’y parvenir.
RFC3330 définit le 127.0.0.0/8
comme étant toujours le sous-réseau de bouclage.
L'utilisation de localhost
est toutefois définie sous Windows dans c: \ windows \ system32 \ drivers \ etc \ hosts
et Linux dans / etc / hosts
est purement conventionnel. De plus, le nom lo
est le nom typique donné à l'interface
Si vous devez être absolument certain, utilisez 127.0.0.1
.