Назад | Перейти на главную страницу

Программное извлечение конфигурации интерфейса из системы?

Я хотел бы создать список всех интерфейсов, доступных в системе [Linux], и для каждого интерфейса создать список доступных IP-адресов. Я надеялся сделать это более изящным образом, чем разбор вывода ip команду, при этом избегая хлопот ioctl() и друзья.

К сожалению, пока /sys/class/net/INTERFACE содержит информацию об адресации на уровне каналов (например, MAC-адрес интерфейса), но не содержит информации об IP-адресации. Ни один из файлов в /proc содержат эту информацию.

Прежде чем я уйду и сделаю свой код Python более похожим на C, есть ли для этого лучшие инструменты? Что-то вроде ip который производит структурированный вывод, было бы неплохо.

Puppet Labs (компания, которая производит Puppet) также производит инструмент под названием Facter:

Facter - это легкая программа, которая собирает базовую информацию об узлах об оборудовании и операционной системе. Facter особенно полезен для получения таких вещей, как имена операционных систем, характеристики оборудования, IP-адреса, MAC-адреса и ключи SSH.

Для этого не требуется установка или использование Puppet, только интерпретатор Ruby.

Я считаю, что Facter невероятно полезен в моих повседневных задачах системного администратора именно по этой причине. Например, чтобы показать IP-адрес (а) в поле:

$ facter interfaces
eth0,eth0_0,eth1,eth2,eth3,sit0
$ facter | grep ipaddress
ipaddress => 10.2.5.100
ipaddress_eth0 => 10.2.5.100
ipaddress_eth0_0 => 10.2.6.1
$ facter ipaddress_eth0
10.2.5.100

Есть много другой информации, которую может предоставить Facter, и легко написать свои собственные факты, чтобы расширить ее.