Como encontrar dinamicamente o nome e o tipo de interfaces anexadas a um sistema

4

Eu tenho um caso de uso em que preciso configurar dinamicamente alguns arquivos que incluem o nome das interfaces presentes no sistema, digamos eth0 , wlan0 . No entanto, quando eu mudo o sistema, às vezes, ele é alterado para eth1 ou wlan1 . Do Ubuntu 14.04, as interfaces Ethernet são nomeadas como p2p1 , p1p1 e interfaces sem fio como wlan0 ou wlan1 .

Assim, podemos dizer que o nome das interfaces pode ser qualquer coisa, não importa, desde que possamos encontrar quais nomes são dados para o tipo de interface.

Eu escrevi um pequeno script para isso, mas não sei se poderia haver uma maneira melhor de encontrar isso, o que funciona em todo o sistema baseado em Linux.

#!/bin/bash

# check if directory exist 
DIRECTORY=/sys/class/net
wifi_interface=""
lan_interface=""
if [ -d "$DIRECTORY" ]; then
    cd $DIRECTORY

    ilist='ifconfig -s  | awk '{print $1}' | tail -n +2'

    # array length
    ilist_len='echo "${ilist[@]}" | wc -l'

    # empty array 
    il=

    # Iterating over interfaces 
    for i in $(seq 1 $ilist_len)
    do 
        iname='echo $ilist | sed -n "$i"p'
        echo $iname
        if [ "$iname" != "lo" ]; then
            cur_dir=$DIRECTORY/$iname
            cd $cur_dir
            if [ -d "$cur_dir/wireless" ]; then
                wifi_interface=$iname
            else 
                lan_interface=$iname
            fi
        fi
        pwd
        cd ~
    done
    exit 0
else
    echo "Can't find the directories ! Something went wrong "
    exit 0
fi

No script acima, decidi o tipo de interfaces com base na presença ou ausência do diretório /sys/class/net/<INTERFACE>/wireless . O script assume que apenas a interface 1-1 está presente para Ethernet e sem fio.

Eu duvido que o diretório wireless esteja sempre presente em todas as interfaces sem fio. Por exemplo, no caso de interfaces sem fio virtuais.

    
por Ankit Kulkarni 14.01.2016 / 07:27

1 resposta

4

Hoje, para uma distribuição Linux relativamente moderna, eu tentaria inicialmente usar o comando ip

ip link show

e depois filtrar sua saída para obter uma lista de interfaces.

Você também pode usar ifconfig -a , mas novas versões de algumas distribuições não são mais instaladas por padrão.

Similarmente, netstat -i pode ser útil.

Você pode usar o comando iwconfig para determinar se uma interface é sem fio ou não

iwconfig ens160
ens160    no wireless extensions.
    
por 14.01.2016 / 07:44