Maneira portátil de obter lista de todas as interfaces de rede ativas

4

Gostaria de obter a lista de todas as interfaces de rede ativas (por exemplo, eth0, wlan0). Eu suponho que terei que analisar a saída de ifconfig , mas a formatação é diferente em vários sistemas operacionais. Alguém tem uma maneira portátil de obter essa informação para que possa ser usada na maioria dos unices (linux, * bsd, mac).

    
por Malcolm Reynolds 01.05.2011 / 23:53

4 respostas

1

Não tenho certeza sobre portabilidade, porque uma lista de interfaces de rede pode estar relacionada à implementação do kernel e o linux não está relacionado a * bsd / mac ... no entanto, se ifconfig não for bom para você, tente netstat -i

    
por 02.05.2011 / 00:10
6

Confira o pacote facter . Ele é usado principalmente pelo programa de gerenciamento de configuração de marionetes para capturar metadados de máquinas instaladas, mas pode ser executado de forma independente para fins semelhantes. Sua saída inclui informações sobre as interfaces de rede encontradas na máquina e sua formatação será consistente em todas as plataformas.

Exemplo de saída:

user@host:~$ facter
architecture => i386
domain => members.linode.com
facterversion => 1.3.8
fqdn => host.members.linode.com
hardwareisa => unknown
hardwaremodel => i686
hostname => host 
id => user 
ipaddress => 1.2.3.4 
ipaddress_eth0 => 1.2.3.4 
kernel => Linux
kernelrelease => 2.6.32.16-linode28
lsbdistcodename => hardy
lsbdistdescription => Ubuntu 8.04.4 LTS
lsbdistid => Ubuntu
lsbdistrelease => 8.04
macaddress => 76:c9:3e:0b:xx:xx
macaddress_eth0 => fe:fd:43:12:xx:xx
memoryfree => 393.08 MB
memorysize => 498.68 MB
operatingsystem => Debian
operatingsystemrelease => 2.6.32.16-linode28
processor0 => Intel(R) Xeon(R) CPU           L5335  @ 2.00GHz
processor1 => Intel(R) Xeon(R) CPU           L5335  @ 2.00GHz
processor2 => Intel(R) Xeon(R) CPU           L5335  @ 2.00GHz
processor3 => Intel(R) Xeon(R) CPU           L5335  @ 2.00GHz
processorcount => 4
ps => ps -ef
rubysitedir => /usr/local/lib/site_ruby/1.8
rubyversion => 1.8.6
swapfree => 186.84 MB
swapsize => 255.99 MB
uniqueid => 007f0101
    
por 02.05.2011 / 00:08
2

O seguinte retornará uma lista de interfaces ativas em todas as distribuições comuns do Linux:

ifconfig | grep "Link encap" | awk '{ print $1 '}

Se você quiser também incluir interfaces que estão atualmente inativas (inativas), basta adicionar o sinalizador -a da seguinte forma:

ifconfig -a | grep "Link encap" | awk '{ print $1 '}

Até onde eu sei, não há nenhum método comum que possa ser usado em qualquer sistema POSIX para recuperar uma lista de interfaces de rede, então você terá que localizar seu comando para o sistema operacional atualmente em uso.

    
por 03.05.2011 / 01:40
0

Netstat -i e ifconfig mostrarão apenas as interfaces de rede atualmente "ativas". Uma interface ativa também pode não ter portadora e, portanto, ser inutilizável. Você precisa procurar o sinalizador RUNNING (ifconfig) ou R (netstat -i). Esse sinalizador denota que a interface tem uma portadora ativa ou, mais comumente, tem algo em que a interface de rede está fisicamente conectada, como um comutador.

    
por 02.05.2011 / 03:22