Wie man Netzwerk-adapter-Statistik in linux/Mac OSX?
Ich bin auf der Suche nach einem Weg zu halten von Netzwerk-Statistiken in C auf Linux und MacOSX. Konkret, ich muss überwachen, die Anzahl der bytes, die hochgeladen und heruntergeladen werden von jedem Netzwerk-adapter auf dem system - ich brauche das nicht zu tun packet inspection, oder die Unterscheidung zwischen Protokollen, nur eben ein "total bytes" - Zähler, die kann ich poll in Abständen wäre in Ordnung. Im Windows kann ich dies mit der iphlpapi.dll Bibliothek über GetIfTable (Liste der Netzwerk-Adapter) und GetIfEntry (Lesen Sie die Statistiken), aber ich kann nicht finden, die Linux/OSX-äquivalente. Meine Kenntnisse in C ist Recht einfach, so würde ich mich über eine Lösung, die nicht zu beteiligten. Jede Hilfe wäre sehr geschätzt werden!
- Von dem, was ich gefunden habe, so weit Sie nicht gehen, um in der Lage sein, die Nutzung von gemeinsamen code auf beiden Plattformen. Es erscheint Linux benutzt Dateisystem zu speichern diese Informationen, und die normale Methode der Abfrage der Systeme ist, die files zu Lesen. Auf OSX die Informationen werden im Speicher gehalten und obskuren Dateien.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Darwin netstat-source-code verwendet sysctl.
Hier ist etwas code, der druckt die Anzahl der bytes in und out auf OSX:
Ich kann nicht sprechen, OSX aber auf linux werfen Sie einen Blick auf /proc/net/dev.
Wenn Sie 'cat /proc/net/dev" sollte man sehen, Statistiken, einschließlich 'bytes' - die Gesamtzahl der bytes der Daten, die übertragen oder empfangen durch die Schnittstelle. Lesen Sie die Datei in Ihrem eigenen Programm.
EDIT:
Ich Las nicht deine ganze Frage. Dieser Artikel soll Ihnen den Einstieg in die /proc und hat einen Abschnitt über /proc/net/dev.
Außerdem, um die Liste der Schnittstellen, die Sie anrufen können, ioctl mit der SIOCGIFCONF option. Sie können Google für eine anständige code-Beispiel, wie man eine Schleife durch die zurückgegebenen Daten. Oder Sie können einfach ziehen Sie es aus der /proc.net/dev Daten der bereits erwähnte, sollte es einfacher sein.
/sys/class/net/{your network interface}/statistics
, wo{your network interface}
ist der name des Netzwerk-interfaces, den Sie betrachten möchten, z.B.eth0
für die erste Ethernet-Schnittstelle. sysfs (auf/sys
) ist neuer als procfs (auf/proc
).unter Linux:
/sys/class/net/eth0/statistics/
ip -s link show eth0