有没有更好的方法以编程方式从 Linux 操作系统获取网络参数?

有没有更好的方法以编程方式从 Linux 操作系统获取网络参数?

我正在编写一些脚本,需要以编程方式从 Linux 操作系统获取大量网络参数。

例如names of all network interfaces, ip address, netmask, MAC address。对于无线接口,我可能还需要获取bit rate, frequency, operating mode, transmit power, signal level, noise level,等等。

目前,我正在使用普通文本处理和正则表达式来解析 Linux 命令行工具的输出,例如ifconfig, ip, route, iw and iwconfig。这种方法的一个问题是,有时输出会与我们预期的不同。很难预测所有可能场景的所有可能输出格式。

有没有更好的方法以编程方式从 Linux 操作系统获取网络参数?

答案1

对于所有已定义的网络接口的名称,我只需查看/sys/class/net目录的内容。

至于其他方面,这取决于你所说的“Linux 操作系统”是什么意思。如果你指的是 Ubuntu 的当前桌面版本,那么nmcli命令行实用程序似乎提供了你正在寻找的许多功能,例如

$ nmcli --terse --fields FREQ,RATE,SIGNAL dev wifi list bssid XX:XX:XX:XX:XX:XX
5220 MHz:54 MB/s:70

$ nmcli --terse --fields IP4 dev list iface wlan0
IP4.ADDRESS[1]:ip = 192.168.1.16/24, gw = 192.168.1.1
IP4.DNS[1]:192.168.1.1

如果这不能提供您需要的精细控制,您可以通过使用命令行dbus-send和/或dbus-monitor工具或 C 或 python DBUS API 连接到 DBUS 来自己动手 - 文档有点单薄,但有一两个有用的教程,例如Dbus 教程 - 网络管理器的乐趣

答案2

这可能会有所帮助(假设你不介意python):

http://it-ebooks.info/book/3515/

第 66 页(79)

由于此方法依赖于 c 系统调用,因此用 C 编写模块可能会更好。

相关内容