en Python, est-il un moyen de détecter si une interface réseau Dans mon script, l'utilisateur spécifie une interface réseau, mais je voudrais m'assurer que l'interface est opérationnelle et a été attribuée à une adresse IP, avant de faire autre chose. P>
Je suis sur Linux fort> et je suis
6 Réponses :
Comme suggéré par @gabriel Samfira, j'ai utilisé La documentation est ici p> p> Nettifaces code>. La fonction suivante renvoie true quand une adresse IP est associée à une interface donnée.
Une vérification utile avant d'appeler la fonction ci-dessus est la suivante: si aninterface en netifaces.interfaces () # ... code>
Malheureusement, cela ne fonctionne que la moitié de IPv6 / AF_INET6: tandis qu'une interface becomming exécutant obtient son LLA, lorsque la même interface est hors ligne, la LLA vit toujours.
Vous pouvez voir le contenu du fichier dans / sys / classe / net /
L'interface peut être configurée avec une adresse IP et ne pas être en place afin que la réponse acceptée soit fausse. Vous devez réellement vérifier Selon l'application, l'application Tout cela est spécifique à Linux bien sûr. P> / sys / classe / net /
indicateurs 0x1 code> est de savoir si l'interface est en hausse ou non. p>
/ SYS / Classe / net /
Operstate code> vers le bas, par exemple quand aucun câble n'est connecté. p>
A AVERTISSEMENT: Dans Linux Mint 18.2, le contrôle de l'applet de Cinnamon Network Manager pour désactiver un adaptateur réseau le laisse à la fois opérationnel et opérationnel. Il supprime l'adresse IP, cependant.
Réponse en utilisant Psutil :
import psutil import socket def check_interface(interface): interface_addrs = psutil.net_if_addrs().get(interface) or [] return socket.AF_INET in [snicaddr.family for snicaddr in interface_addrs]
Si la question concerne la vérification si le câble est conçu (FreeBSD); pour cela, pas de support API jusqu'à présent :( ... P> P>
C'est un peu de surkillée si nous pouvons simplement lire / sys / classe / net /
sur FreeBSD 11 CAT: / SYS / CLASS / NET / EM0 / OPSTETE: Aucun fichier ou répertoire de ce type code>
Je vois. Y a-t-il un équivalent à / sys / classe / net code>?
Je ne pouvais pas voir. J'aimerais connaître l'équivalent à FreeBSD.
Quel système d'exploitation? Ce script doit-il fonctionner sur différents systèmes d'exploitation, ou est-ce juste un en particulier?
Ops. Linux. ;) À l'avenir, je vais étendre cela à OS X et Windows, mais pour l'instant Linux sera suffisant
Pas de soucis :). Stackoverflow.com/questions/11735821/python-get-Localhost- IP / ... <- Avez-vous vu cela? La réponse acceptée fonctionne sur Linux. Le module NetIffaces est portable et fonctionnera sur le système d'exploitation testé.
Wow, cette bibliothèque est géniale! Cela a résolu tous mes problèmes. Merci!!
Je suis sur Linux et je suis une racine sonne comme ceci est ma maison, je vais le brûler si j'ai aussi !!!