Comment détecter la physique de l'état de connexion d'un réseau de câble/connecteur?
Dans un environnement Linux, j'ai besoin de détecter la physique connecté ou déconnecté de l'état d'un connecteur RJ45 à son support. De préférence à l'aide de scripts BASH seulement.
La suite de solutions qui ont été proposées sur d'autres sites ne fonctionnent PAS pour cette raison:
- À l'aide de 'ifconfig' - depuis un câble de réseau peuvent être connectés, mais le réseau n'est pas correctement configuré ou pas actuellement.
- Ping à un hôte du produit, puisqu'il sera à l'intérieur d'un réseau local à l'aide d'un inconnu de configuration du réseau et des hôtes inconnus.
N'est-il pas un état qui peut être utilisé dans le système de fichiers /proc (tout est là)?
Comment est le monde de Linux suppose d'avoir leur propre version de Windows bulle pop-up à partir de l'icône de la barre indiquant que vous avez juste débranché le câble réseau?
Kent Fredric et lothar, les deux de vos réponses satisfaire mon besoin... merci beaucoup! Celui que je vais utiliser... je ne sais toujours pas.
Je suppose que je ne peux pas vous mettre à la fois vers le bas comme la réponse correcte? Et c'est probablement juste pour vous dire que je n'en choisir qu'une. Retournez une pièce de monnaie, je suppose? Encore une fois, merci!
Vous devez vous connecter pour publier un commentaire.
Vous voulez regarder les nœuds dans
J'ai testé avec le mien:
Fil Branché:
Fil Supprimée:
Fil Branché à Nouveau:
Côté Astuce: la récolte de toutes les propriétés à la fois le moyen le plus facile:
Cela forme une belle liste de
key:value
paires.grep -H . eth0/*
: Ce whipe emty lignes et imprimer le nom de l'entrée avec appartiennent chacune des lignes.grep -s "" eth0/*
Vous pouvez utiliser ethtool:
À seulement obtenir le statut de connexion, vous pouvez utiliser grep:
grep Link
t-il. Merci!!!!!up
état.Utiliser 'ip monitor" pour obtenir en TEMPS RÉEL des modifications d'état des liens.
1
quand mon câble est débranché alors queip monitor
montre réellement quelque chosecat /sys/class/net/ethX
est de loin la méthode la plus simple.L'interface doit être bien, sinon vous obtiendrez un argument non valide erreur.
Alors d'abord:
Alors:
cat: read error: Is a directory
ethX/carrier
qui est à 1 si le "transporteur" est détecté, ce qui signifie que le câble est connecté et qui transportent les données...Sur le faible niveau de, ces événements peuvent être capturés à l'aide de rtnetlink sockets, sans aucune interrogation. Remarque: si vous utilisez rtnetlink, vous avez à travailler de concert avec udev, ou votre programme peut se confondre lorsque udev renomme une nouvelle interface réseau.
Le problème avec les configurations de réseau avec des scripts shell, c'est que les scripts shell sont terribles pour la gestion des événements (comme un câble de réseau étant branché et out). Si vous avez besoin de quelque chose de plus puissant, prendre un coup d'oeil à mon MNT langage de programmation, un langage de programmation conçu pour les configurations de réseau.
Par exemple, un simple MNT script qui va imprimer "câble" et "câble" sur la sortie standard (en supposant que l'interface est déjà en place):
(interne,
net.backend.waitlink()
utilise rtnetlink, etnet.backend.waitdevice()
utilise udev)L'idée de MNT, c'est que vous l'utiliser exclusivement pour configurer le réseau, donc, normalement, les commandes de configuration viendrait entre les deux, tels que:
Le plus important à noter est que l'exécution est autorisée à régression; dans le second exemple, par exemple, si le câble est sorti, l'adresse IP sera automatiquement supprimé.
Il existe deux démons qui permettent de détecter ces événements:
ifplugd et netplugd
ifplugstatus
outil à partir de laifplugd
démon. Pas besoin d'arguments, il suffit de taperifplugstatus
et vous obtiendrez tous les NIC que branché ou débranché.Plus modernes distributions Linux utilisent NetworkManager pour cela. Vous pouvez utiliser D-BUS pour écouter les événements.
Si vous voulez un outil de ligne de commande pour vérifier l'état, vous pouvez également utiliser
mii-tool
, étant donné que vous avez Ethernet à l'esprit.mii-tool
semble être la seule commande que peut de rapport sur l'état de la liaison lorsque l'interface est en panne.- Je utiliser cette commande pour vérifier qu'un fil est connecté:
Si le résultat sera vers le haut ou vers le bas. Parfois, il illustre inconnu, alors vous devez vérifier
Il affiche 0 ou 1
Quelques précisions et astuces
Je fais tout ce que utilisateur normal (pas racine)
Saisir les infos de
dmesg
À l'aide de
dmesg
est l'un des 1ers choses à faire pour s'enquérir état actuel de système:pourrait répondre quelque chose comme:
ou
en fonction de l'état, le message peut varier selon le matériel et les pilotes utilisés.
Nota: cela pourrait par écrit
dmesg|grep eth.*Link.is|tail -n1
mais je préfère utilisersed
.Test autour de
/sys
pseudo système de fichiersDe la lecture ou de l'écriture sous
/sys
pourrait briser votre système, surtout s'exécuter en tant que racine! Vous avez été prévenu 😉C'est un regroupement de méthode, pas un réel suivi des événements.
Pourrait rendre quelque chose comme (une fois que vous avez débranché et rebranché, selon le cas ):
(Touche Entrée pour sortir de la boucle)
Nota: Ce besoin d'
patch
à être installé.In fine, il faut déjà être quelque chose à ce sujet...
Selon Installation de Linux, vous pouvez ajouter
if-up
etif-down
scripts pour être en mesure de réagir à ce genre d'événements.Sur Debian base (comme Ubuntu), vous pouvez stocker vos scripts dans
voir
man interfaces
pour plus d'infos.e1000
et evenement pourrait se produire à un autre moment que936555.596870
, mais vous allway va voirNIC Link is
.ou pour moi plus rapide obtient:
Il va écouter le fichier syslog.
Résultat (si déconnecter et après 4 secondes, rebranchez-le à nouveau):
sur arch linux. (je ne sais pas sur les autres distributions) vous pouvez afficher le operstate. ce qui montre, s'il est connecté ou vers le bas si ce n'est le operstate vie sur
Vous peut utilisez ifconfig.
Si l'entrée montre en cours d'EXÉCUTION, l'interface est physiquement connecté. Ce sera indiqué, peu importe si l'interface est configurée.
C'est juste une autre façon d'obtenir l'information dans
/sys/class/net/eth0/operstate
.J'ai été en utilisant mon OpenWRT l'appareil amélioré comme un répéteur (qui ajoute virtuel ethernet et lan sans fil capacités) et a constaté que l' /sys/class/net/eth0 transporteur et opstate valeurs n'étaient pas fiables. J'ai joué un peu avec /sys/class/net/eth0.1 et /sys/class/net/eth0.2 ainsi, avec (au moins à ma conclusion) aucun moyen fiable de détecter que quelque chose a été physiquement branché et de parler sur l'un des ports ethernet. J'ai compris un peu brut, mais apparemment fiable pour détecter si quelque chose avait été branché depuis le dernier redémarrage/poweron état au moins (qui a fonctionné exactement comme j'en avais besoin dans mon cas).
Vous obtiendrez un 0 si rien n'a été branché et quelque chose > 0 si tout est branché (même si il était branché et depuis retiré) depuis la dernière mise sous tension ou redémarrage du cycle.
Espère que cela aide quelqu'un à moins!