Я хотел бы создать список всех интерфейсов, доступных в системе [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, и легко написать свои собственные факты, чтобы расширить ее.