Atribuindo nomes de interface persistentes, usando o udev, com um método generalizado

1

Atualmente estou trabalhando em um Raspberry Pi 3, tentando fazer algumas coisas IoT. Eu quero que seja capaz de farejar um adaptador sem fio USB e enviar seus dados via adaptador sem fio padrão ou ethernet. Eu pensei que eu poderia usar o udev, modificando /etc/udev/rules.d/70-persistent-net.rules. Pareceu-me que eu preciso obter o endereço MAC do adaptador sem fio padrão. Eu tenho o endereço MAC usando o lshw:

root@raspberrypi:/etc/udev# lshw -class network   
*-usb:1             
   description: Wireless interface
   product: 802.11 n WLAN
   vendor: Ralink
   physical id: 4
   bus info: usb@1:1.4
   logical name: wlan1
   version: 1.01
   serial: 1.0
   capabilities: usb-2.00 ethernet physical wireless
   configuration: broadcast=yes driver=rt2800 usbdriverversion=4.4.13-v7+ firmware=0.29 link=no maxpower=450mA multicast=yes speed=480Mbit/s wireless=IEEE 802.11bgn   
*-network:0
   description: Wireless interface
   physical id: 2
   logical name: wlan0
   serial: b8:27:eb:e9:67:22
   capabilities: ethernet physical wireless
   configuration: broadcast=yes driver=brcmfmac driverversion=7.45.41.26 firmware=01-df77e4a7 ip=192.168.0.102 multicast=yes wireless=IEEE 802.11bgn   
*-network:1
   description: Ethernet interface
   physical id: 3
   logical name: eth0
   serial: b8:27:eb:bc:32:77
   size: 100Mbit/s
   capacity: 100Mbit/s
   capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
   configuration: autonegotiation=on broadcast=yes driver=smsc95xx driverversion=22-Aug-2005 duplex=full firmware=smsc95xx USB 2.0 Ethernet ip=10.42.0.11 link=yes multicast=yes port=MII speed=100Mbit/s

Nesse comando, posso ver o endereço MAC da minha interface sem fio padrão. Simplesmente eu colocaria nas regras e seria capaz de definir a interface diretamente para wlan0. O que eu quero é algo mais geral: não quero fazer essas configurações em todos os dispositivos que configuro. Vou escrever um roteiro e ele vai pegar o endereço do adaptador sem fio para mim.

root@raspberrypi:/etc/udev# sudo lshw -class network | grep b8:27:eb | sed 's/^.*serial: //' 
b8:27:eb:e9:67:22 
b8:27:eb:bc:32:77

Eu usei lshw , grep e o endereço MAC que pertencia à Raspberry Pi Foundation (b8: 27: eb: xx: xx: xx), depois consegui algo como "serial:, e usado sed para simplesmente deixar o MAC.
Então eu percebi que o adaptador ethernet também tinha endereço MAC com o mesmo cabeçalho.

Minha pergunta é, como posso obter apenas o endereço MAC do adaptador sem fio RPi como uma saída de um comando? Eu não sou muito experiente no Linux, então provavelmente não consegui descobrir uma solução simples. Estou aberto a todas as sugestões.
Tenha um bom dia

    
por Hüseyin Bilge Yağcı 18.08.2016 / 14:45

2 respostas

1

Ele imprimirá o primeiro MAC sem fio (note que não tenho certeza se esses endereços são chamados de "endereços MAC" em um contexto sem fio)

lshw -class network  | awk '/usb:/ {ok=0} /network:/ {ok=1} /serial:/ {serial=$2} /capabilities: .*wireless/ && ok {print serial; exit}'
    
por 18.08.2016 / 14:59
0

Se você souber o nome da interface, poderá consultar o endereço MAC com ifconfig

ifconfig wlan0 | grep HWaddr | cut -d ' ' -f 10-

o ifconfig wlan0 imprimirá informações sobre apenas essa interface.

o grep HWaddr manterá apenas a linha que possui o endereço MAC

cut -d '' -f 10 - dividirá essa linha em espaços e dará o que está depois do décimo espaço até o final da linha.

    
por 18.08.2016 / 15:02