Der Server verfügt über mehrere Netzwerkkarten, von denen nur eine über ein Kabel verfügt.
Wie kann ich testen, ob ein bestimmter Port angeschlossen ethX
ist oder nicht?
Ich habe viele ähnliche Fragen gefunden , aber sie funktionieren bei mir weder ethtool
noch cat /sys/class/net/eth1/carrier
.
In meinem Fall ist das Kabel tatsächlich angeschlossen eth2
, ethtool
zeigt aber immer nochLink detected: no
Settings for eth2:
Supported ports: [ FIBRE ]
Supported link modes: 10000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: No
Advertised link modes: 10000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: No
Speed: Unknown!
Duplex: Unknown! (255)
Port: Direct Attach Copper
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: no
Es ist kein Kabel angeschlossen eth3
, aber der ethtool
Ausgang sieht fast gleich aus:
diff <(ethtool eth2) <(ethtool eth3)
1c1
< Settings for eth2:
---
> Settings for eth3:
11c11
< Port: Direct Attach Copper
---
> Port: Other
Erst wenn ich die Schnittstelle eth2
aufrufe, dann ethtool
zeigt Link detected: yes
. Danach ethtool
meldet sich der Link als yes
, auch wenn ich die Schnittstelle heruntergefahren habe.
Kurz gesagt, ethtool
scheint nicht beim ersten Mal zu funktionieren, bevor die Schnittstelle überprüft wurde.
Wie kann ich zuverlässig testen, ob an einer bestimmten Schnittstelle ein Kabel angeschlossen ist oder nicht ?
tcpdump
ist mein normaler Ansatz, gegen jedes Nic zu verwenden, um zu sehen, ob Pakete vorbeifliegen.Antworten:
Ich gehe davon aus, dass Sie den Verbindungsstatus der Netzwerkkarte ermitteln möchten, nicht den physischen Zustand, in dem ein Kabel an die Steckdose angeschlossen ist. (Das könnte unmöglich herauszufinden sein.)
Bei einer schnellen Suche haben Sie dort wohl schon die Antwort. Rufen Sie die Benutzeroberfläche auf, warten Sie, bis ein Link gefunden wurde. Wenn es einen gibt (dies kann einige Sekunden dauern), überprüfen Sie die Ausgabe von
ethtool
odercarrier
und / oderoperstate
in/sys/class/net/$NIC/
.ifconfig somenic up
scheint diese beidenioctl
Anrufe zu tätigen:Das heißt, es setzt ein
IFF_UP
. Basierend auf hier , ist diese Einstellung , was das Gerät tatsächlich verursacht initialisiert werden:Es gibt Kommentare zu dem ähnlichen Effekt in der
e1000e
Treiberquelle :Das würde bedeuten , dass es keine Möglichkeit gibt , um sinnvoll den Link Zustand einen NIC zu finden , die nicht ist bis , da die Hardware nicht einmal initialisiert werden würde.
Natürlich ist es zumindest theoretisch möglich, dass sich einige Treiber anders verhalten und die Hardware initialisieren, bevor jemand sie einstellt
IFF_UP
, aber das würde im allgemeinen Fall immer noch nicht helfen.Wenn Sie auf einem Computer (mit einem
e1000e
an einen Cisco angeschlossenen Switch) die Schnittstelle nach unten ziehen, wird beim Switch auch die Verbindung unterbrochen.Auf einem anderen Computer (mit einer eingebetteten Realtek-Netzwerkkarte) führen Änderungen von oben nach unten dazu, dass der Remote-Switch kurzzeitig getrennt wird. Der Switch sieht jedoch, dass die Verbindung wieder hergestellt wird. (
ethtool
Zeigt jedoch "kein Link" auf der PC-Seite an.) Dies hat möglicherweise etwas mit der Vorbereitung auf Wake-on-LAN oder ähnliches zu tun, aber ich habe wirklich keine Ahnung.quelle
Versuchen Sie den Befehl
ifplugstatus
aus dem Paket ifplugdNeben der Bildschirmausgabe können Sie auch den Beendigungsstatus des Befehls erkennen.
(von manpage)
quelle
Ich habe mir den Quellcode von ethertools angesehen, konnte aber keinen Ort finden, an dem der Verbindungsstatus beschrieben wird.
Dann stellte ich fest, dass dies ein genaues Duplikat einer Frage zu SO zu sein scheint: /programming/808560/how-to-detect-the-physical-connected-state-of-a-network-cable -Verbinder
Ich habe die meisten der dort aufgeführten Antworten ausprobiert (mii-tools, ethertool, cat der Träger oder operstate, dmesg) und keine von ihnen funktionierte ordnungsgemäß auf dem Link, wenn die ifconfig nicht verfügbar war.
Da die SO-Frage älter als 6 Jahre ist, denke ich, dass die meisten möglichen Antworten bereits vorhanden sind.
Meine Stimme wäre, dass Sie mit Standard-Linux-Tools den Netzbetreiber erst überprüfen können, wenn Sie versuchen, ihn aufzurufen. Danach
mii-tools
schien es gut für die Linkerkennung zu funktionieren und eine einheitliche Antwort zu geben.Ich habe dort nicht rtnetlink und einige andere Antworten ausprobiert, die sich mit der Erkennung von Änderungen im Verbindungsstatus befassen, was vermutlich nicht das ist, was Sie wollten.
quelle