Como obter apenas o nome da interface física da ethernet?

2

Existe uma maneira de obter apenas o nome da interface Ethernet física (ou seja, a interface Ethernet virtual)?
Para dar um pouco de fundo, estou tentando fazer com que alguns SBCs (RPi 3) escrevam seus endereços IP para um DataBase. Mas como os nomes da interface Ethernet física em SBCs diferentes geralmente não são os mesmos, estou achando difícil obter seus endereços IP.
Uma maneira que eu poderia pensar em resolver isso é dar a todos os SBCs interface ethernet um nome comum como eth0. Mas este método parece um pouco desajeitado. Então, existe alguma outra alternativa para obter apenas o nome da interface física da Ethernet?

    
por yash 20.03.2018 / 08:27

1 resposta

5

Você pode dizer quais interfaces são virtuais via

ls -l /sys/class/net/

que lhe dá esta saída:

[root@centos7 ~]# ls -l /sys/class/net/
total 0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0-nic -> ../../devices/virtual/net/virbr0-nic

A partir daí, você pode grep para filtrar apenas interfaces não virtuais:

ls -l /sys/class/net/ | grep -v virtual

Outra opção é usar esse pequeno script, adaptado de esta resposta , que imprime o nome de todas as interfaces que não têm um endereço MAC de 00: 00: 00: 00: 00: 00, ou seja, físico:

#!/bin/bash

for i in $(ip -o link show | awk -F': ' '{print $2}')
do
    mac=$(ethtool -P $i)
    [[ $mac != *"00:00:00:00:00:00"* ]] && echo "$i"
done
    
por 20.03.2018 / 09:03