Ich möchte feststellen, ob eine Netzwerkkarte aktiviert, aktiviert und eingesteckt ist. Grundsätzlich möchte ich wissen, ob die Netzwerkkarte funktioniert. Ich benötige diese Informationen von einem C++ - Programm und möchte eine Fehlermeldung anzeigen, wenn das Netzwerk nicht ordnungsgemäß funktioniert. Wenn möglich, möchte ich vermeiden, Shell-Befehle zu verwenden, um diese Informationen zu bestimmen.Unter Linux: Wie kann ich programmgesteuert feststellen, ob eine NIC-Schnittstelle aktiviert und angeschlossen ist?
Antwort
Sie können /sys/class/net/eth0/operstate
betrachten, wo eth0 Ihre Schnittstelle ist, um zu sehen, ob es oben ist.
Betrachten Sie /sys/class/net/eth0/carrier
, um zu sehen, ob es einen Träger gibt.
Obwohl ich denke, Ausführung ifconfig
und Freunde geben Ihnen mehr Kompatibilität zu * BSDs.
Gibt es etwas ähnlich Elegantes für ältere Kernel? Auf meiner alten CentOS 4-Box habe ich mit Kernel 2.6.9 keine "operate" -Datei unter/sys/class/net/eth? – Matt
Wissen Sie, wie Sie den Linkstatus überprüfen? Gibt es dafür eine Datei? Wie bei der Verwendung von ethletol eth0 zeigt die Ausgabe an, dass der Link erkannt wurde: YES – user1527227
@EFraim Ich habe gerade verifiziert, dass dies auf meinem 2.6.31 nicht richtig funktioniert.Es scheint, dass es für einen Zugangspunkt nicht verfügbar ist, bis jemand nicht verbunden ist, während ifconfig zeigt, dass es oben ist. Das ist eine sehr große Unterscheidung. Ich kann das nicht sofort mit einem neuen Kernel überprüfen. Mit anderen Worten, Flagge zeigt sich, Träger 0, operate runter. – tothphu
Denken Sie daran, auf Linux "alles" ist eine Datei.
Der beste Weg wäre die Verwendung des freigegebenen Kernels < -> Userspace-Kommunikation, nämlich sysfs
, montiert unter . Netzwerkgeräte an /sys/class/net
verknüpft
Wenn Sie die ioctl
Schnittstelle verwenden, schauen man netdevice
Wie beurteilen Sie die Netzwerkkarte identifizieren möchten? Sie können versuchen, einen Blick auf /etc/udev/rules.d/70-persistent-net.rules
werfen, die Hardware-MAC-Adressen in nette Namen (wie eth0) abbildet.
Dann, wenn Sie die schöneren Namen haben, können Sie Dinge wie ethtool eth0
ausführen, um festzustellen, ob es [physisch] ist verbunden (letzte Zeile), ifconfig eth0
, um zu bestimmen, ob es (suchen ist up „UP BROADCAST ...“), und wenn es eine IP-Adresse hat.
Ich bin bereit zu erraten, es gibt automatische Bibliotheken für diese obwohl; Hast du dich umgesehen? Ich bin mir nicht sicher, ob Code in NetworkManager leicht zugänglich ist, aber das sollte ein guter erster Platz sein, um zu schauen.
Durch die Ausgabe von getifaddrs
können Sie die Verbindungsschicht für die MAC-Adresse verwenden, um einen Adapter zu identifizieren und das ifa_flags
für IFF_UP zu überprüfen. Verwenden Sie AF_NETLINK
für Benachrichtigungen über Schnittstellenänderungen.
- offen
AF_NETLINK
Buchse - binden sie an
sockaddr_nl
mitnl_groups = RTMGRP_LINK
- Nachrichtens
RTM_GETLINK
- make Umfrage/epoll auf Sockel auf Kernel
RTM_NEWLINK
undRTM_DELLINK
Nachrichten - zu lesen, werden Sie anfänglichen Schnittstellen Liste erhalten und seine Änderungen in der Zukunft
- 1. Kann ich programmgesteuert mitteilen, ob Spotlight aktiviert ist?
- 2. Wie kann ich feststellen, ob eine bestimmte TTS-Engine aktiviert (aktiviert) ist? nur
- 3. Wie kann ich feststellen, ob GPS unter Android mit Titanium aktiviert ist?
- 4. Wie kann man feststellen, ob ein `InputMethod` aktiviert ist?
- 5. Wie programmgesteuert feststellen, wie eine DVD oder HDD angeschlossen ist - Master oder Slave?
- 6. Wie kann ich feststellen, ob eine Sitzung aktiv ist?
- 7. Wie kann ich prüfen, ob RMI angeschlossen ist/angeschlossen werden kann?
- 8. Wie kann ich feststellen, ob eine Datei leer ist?
- 9. Wie kann ich feststellen, ob eine Java-Klasse abstrakt ist?
- 10. Wie kann ich feststellen, ob eine zusammengesetzte Formatzeichenfolge ungültig ist?
- 11. Wie kann ich feststellen, ob eine C-Ganzzahlvariable signiert ist?
- 12. Wie kann ich feststellen, ob eine Rust-Bibliothek veraltet ist?
- 13. Wie kann ich programmgesteuert feststellen, ob eine MP3-Datei CBR oder VBR ist? (vorzugsweise mit C#)
- 14. Wie kann ich feststellen, ob eine Datei gzip komprimiert ist?
- 15. Wie kann ich feststellen, ob eine Java-Ganzzahl null ist?
- 16. Wie kann ich PowerPoint-Präsentationen programmgesteuert erstellen? Unter Linux. Kostenlos.
- 17. Programmgesteuert feststellen, ob eine COM-Bibliothek (.DLL) installiert ist
- 18. Wie programmgesteuert testen, ob Assertions aktiviert sind?
- 19. Wie kann ich feststellen, ob Java Sun/Oracle/OpenJDK ist?
- 20. Wie kann ich feststellen, ob eine Vollbildanwendung ausgeführt wird?
- 21. Wie kann ich programmgesteuert feststellen, ob die Visual C++ Runtime 8.0 installiert ist?
- 22. Wie kann ich feststellen, ob ein Steuerelement auf einer Seite aktiviert ist?
- 23. Wie kann ich feststellen, ob eine Klasse serialisiert werden kann?
- 24. Wie kann ich feststellen, ob ein Kontrollkästchen in jQuery aktiviert ist?
- 25. Python: Wie kann ich feststellen, ob mein Python SSL hat?
- 26. Wie kann man feststellen, ob eine DOJO-Checkbox aktiviert ist oder nicht?
- 27. Kann ich feststellen, ob eine Eigenschaft mit nhibernate verschmutzt ist?
- 28. Wie kann ich in J2ME feststellen, ob die Sommerzeit aktiviert ist?
- 29. Wie kann ich programmgesteuert feststellen, ob die Windows-Taskleiste ausgeblendet ist oder nicht?
- 30. Wie kann ich programmgesteuert feststellen, ob ein "touchUpInside" -Ereignis aufgetreten ist?
Wenn Sie nur feststellen möchten, ob die Netzwerkkarte "up" ist, verwenden Sie 'ioctl()' mit 'SIOCGIFFLAGS', um direkt den booleschen Status zu erhalten, siehe http://stackoverflow.com/questions/15723061/how-to-check-if -interface-is-up –