Я пишу некоторые сценарии, которые должны программно получить много параметров сети из 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 ОС?
Для названий всех определенных сетевых интерфейсов я просто посмотрел бы на содержание /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 с любым использованием командной строки dbus-send
и/или dbus-monitor
инструменты или C или Python DBUS API - документация является немного тонкой, но существуют одно или два полезных учебных руководства, например, Учебное руководство Dbus - Забава с Администратором сети
это может помочь (если Вы не возражаете против Python):
http://it-ebooks.info/book/3515/
страница 66 (79)
начиная с этого рецепта полагается на sys-вызовы c, можно быть очень более обеспеченной записью модуля в C.