Extraindo programaticamente a configuração da interface do sistema?

3

Eu gostaria de produzir uma lista de todas as interfaces disponíveis em um sistema [Linux] e, para cada interface, produzir uma lista de endereços IP disponíveis. Eu estava esperando fazer isso de uma maneira mais elegante do que analisar a saída do comando ip enquanto ainda evitava o incômodo de ioctl() e amigos.

Infelizmente, embora /sys/class/net/INTERFACE contenha informações de endereçamento no nível do link (como o endereço MAC da interface), ele não contém nenhuma informação de endereçamento IP. Nem qualquer um dos arquivos em /proc contém essa informação.

Antes de eu sair e fazer meu código Python parecer muito mais com C, existem ferramentas melhores para isso? Algo como ip que produz saída estruturada seria bom.

    
por larsks 23.09.2011 / 20:29

1 resposta

1

A Puppet Labs (a empresa que fabrica o Puppet) também cria uma ferramenta chamada Facter :

Facter is a lightweight program that gathers basic node information about the hardware and operating system. Facter is especially useful for retrieving things like operating system names, hardware characteristics, IP addresses, MAC addresses, and SSH keys.

Ele não requer que o Puppet seja instalado ou usado, apenas um interpretador Ruby.

Acho Facter para ser incrivelmente útil no meu dia-a-dia sysadmin tarefas exatamente por esse tipo de razão. Por exemplo, para mostrar o (s) endereço (s) IP em uma caixa:

$ 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

Existem muitas outras informações que o Facter pode fornecer e é fácil escrever seus próprios fatos personalizados para ampliá-lo.

    
por 24.09.2011 / 09:35