使用 udev 和通用方法分配持久接口名称

使用 udev 和通用方法分配持久接口名称

我目前正在开发 Raspberry Pi 3,尝试做一些物联网方面的工作。我希望它能够嗅探 USB 无线适配器,并通过默认无线适配器或以太网发送其数据。我想我可以使用udev,修改/etc/udev/rules.d/70-persistent-net.rules。在我看来,我需要获取默认无线适配器的MAC地址。我使用 lshw 获取了 MAC 地址:

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

从这个命令中,我可以看到默认无线接口的 MAC 地址。只需将其放入规则中,我就可以将接口直接设置为 wlan0。我想要的是更通用的东西:我不想在我设置的每个设备中进行这些设置。我将编写一个脚本,它会为我获取无线适配器的地址。

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

我用了长沙,grep获取属于 Raspberry Pi Foundation 的 MAC 地址 (b8:27:eb:xx:xx:xx),然后得到类似“serial:”的内容,并使用sed简单地离开MAC。
然后我发现以太网适配器也有具有相同标头的 MAC 地址。

我的问题是,如何才能仅获取 RPi 无线适配器的 MAC 地址作为命令的输出?

答案1

它将打印第一个无线 MAC(请注意,我不确定这些地址在无线环境中是否称为“MAC 地址”)

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

答案2

如果知道接口名称,可以使用ifconfig查询MAC地址

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

ifconfig wlan0将仅打印有关该接口的信息。

grep 硬件地址将仅保留具有 MAC 地址的线路

切-d''-f 10- 会将这一行按空格分开,并给出第 10 个空格之后直到该行末尾的内容。

相关内容