Para superar as diferenças no formato do ifconfig Ubuntu16.04 e Ubuntu17.01

1

Antecedentes:

Estou verificando as interfaces disponíveis da lista no Linux usando o comando ifconfig.

No entanto, há uma diferença no formato da saída do ifconfig no ubuntu 16.04 e no ubuntu 17.10.

Ao verificar mais, o pacote net-tools foi atualizado (de net-tools 1.60 para net-tools 2.10-alpha) no ubuntu17.10 e o ifconfig mais recente gera os nomes da interface de rede com dois pontos (':' ). Na versão mais antiga:

$ ifconfig --version net-tools 1.60 ifconfig 1.42 (2001-04-13)

$ ifconfig

enp0s3 Link encap:Ethernet

Na versão mais recente

$ ifconfig --version net-tools 2.10-alpha

$ifconfig

ens160: flags=4163 mtu 1500

lo: flags=73 mtu 65536

Isso pode quebrar algumas ferramentas que levam em conta ou esperam o extra ':' na saída.

Pergunta:

Existe uma maneira de obter a lista de interfaces de rede de maneira confiável, de modo que qualquer alteração no formato da saída do ifconfig não afete as ferramentas que a utilizam? Existe alternativa para o ifconfig que pode ser usado de maneira consistente?

    
por Sudarshan Srinivasan 29.11.2017 / 05:01

2 respostas

2

O pacote net-tools era obsoleto por algum tempo, sendo substituído pelo iproute2 ( ip sendo a principal ferramenta do pacote). Muitas distribuições não enviam mais ferramentas de rede como parte de sua instalação básica.

Desde então, o desenvolvimento de net-tools foi reiniciado, mas isso resultou em uma série de ferramentas sendo aprimoradas na compatibilidade, como você viu com ifconfig . De NEWS.Debian.gz em um sistema Debian 9.0:

After 15 years without upstream development, net-tools is being worked on again, fixing many long-standing issues. The bad news is that the output of many commands has changed, and it is sure to break scripts that relied on parsing it.

Por esse motivo, pode ser uma idéia adaptar seus scripts para usar as ferramentas iproute2. Por exemplo, ip link deve fornecer informações semelhantes ao seu ifconfig acima. A única desvantagem dessa abordagem é que ela quebra a compatibilidade com sistemas não-Linux, e quase todos usam ifconfig .

    
por 29.11.2017 / 10:13
1

Uma maneira alternativa de listar todas as interfaces no Linux a partir do shell é a leitura de /proc/net/dev , que possui um formato mais estável que a saída do ifconfig (8) de net-tools .

Por exemplo, para obter o nome das interfaces:

whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1
    
por 29.11.2017 / 18:34