8
votes

Python: Vérifiez si une interface réseau est en place

en Python, est-il un moyen de détecter si une interface réseau donnée est up ?

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.

Je suis sur Linux et je suis racine .


5 commentaires

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 !!!


6 Réponses :


8
votes

Comme suggéré par @gabriel Samfira, j'ai utilisé Nettifaces . La fonction suivante renvoie true quand une adresse IP est associée à une interface donnée. xxx

La documentation est ici


2 commentaires

Une vérification utile avant d'appeler la fonction ci-dessus est la suivante: si aninterface en netifaces.interfaces () # ...


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.



3
votes

avec pyroute2 .iPride: xxx

avec pyroute2 .iPDB: xxx


0 commentaires

2
votes

Vous pouvez voir le contenu du fichier dans / sys / classe / net / / opesttat . Si le contenu n'est pas bas , l'interface est en place.


0 commentaires

13
votes

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 / sys / classe / net / / drapeaux . Si le contenu est dans les indicateurs de variable, indicateurs 0x1 est de savoir si l'interface est en hausse ou non.

Selon l'application, l'application / SYS / Classe / net / / Operstate peut être ce que vous voulez vraiment, mais techniquement, l'interface pourrait être up et le Operstate vers le bas, par exemple quand aucun câble n'est connecté.

Tout cela est spécifique à Linux bien sûr.


1 commentaires

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.



5
votes

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]


0 commentaires

0
votes

Si la question concerne la vérification si le câble est conçu (FreeBSD); xxx

pour cela, pas de support API jusqu'à présent :( ...


4 commentaires

C'est un peu de surkillée si nous pouvons simplement lire / sys / classe / net / / optiontate ...


sur FreeBSD 11 CAT: / SYS / CLASS / NET / EM0 / OPSTETE: Aucun fichier ou répertoire de ce type


Je vois. Y a-t-il un équivalent à / sys / classe / net ?


Je ne pouvais pas voir. J'aimerais connaître l'équivalent à FreeBSD.