Wie kann ich die für ein bestimmtes Netzwerkgerät unter Linux konfigurierte IP-Adresse / Netzmaske / Gateway programmgesteuert finden?

7

Ich möchte einen Code schreiben, der für jedes Netzwerkgerät (z. B. eth0, lo, Master-Geräte) einige Statistiken und Konfigurationsdaten über dieses Gerät prüft.
Ich konnte die Statistikdaten (und die meisten Konfigurationsdaten) in / sys / class / net / ... finden, jedoch konnte ich keine C / C ++ - API oder irgendeinen Eintrag in procfs / sysfs finden, der die inet addr auflistete. Netzmaske und Gateway.

Einige Alternativen habe ich überprüft:

  • Analyse der Ausgabe von ifconfig / route / einigen anderen Dienstprogrammen: Ich möchte bei jeder Inspektion keinen Unterprozess starten.
  • parsing / etc / sysconfig / network-scripts /: gibt mir nur die Startkonfiguration und nicht den aktuellen Status.

Da dieser Code für ein Produkt an meinem Arbeitsplatz gedacht ist, bei dem jede externe Bibliothek gründlich inspiziert wird (dh es wird ewig dauern, bis ich eine externe Bibliothek hinzufüge), bevorzuge ich Lösungen, die auf Linux nativer API und nicht auf externen Bibliotheken basieren .

Danke!

    
Oren S 07.06.2010, 12:27
quelle

3 Antworten

16

Es gibt sicher eine Struktur von ifreq und ioctl () -Aufrufen, die Sie alle Schnittstelleninformation ergreifen können:

Man-Seite ist hier DRL 07.06.2010, 12:34

quelle
9

Das Ausführen von netstat über strace (in einer zufälligen Linux-Box) zeigt die folgende Abfolge von Aufrufen an:

%Vor%

Also, das "Geheimnis" scheint zu sein, einen Socket zu erstellen, und dann ein paar ioctl() Aufrufe auszuführen, um auf die aktuellen Informationen zuzugreifen.

    
unwind 07.06.2010 12:33
quelle
3

Schauen Sie sich /usr/include/ifaddrs.h an. Dafür gibt es eine GNU-spezifische API.

%Vor%     
user3258797 21.10.2014 12:55
quelle

Tags und Links