Raspberry-Pi
使用 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
我使用lshw,grep ’d 屬於 Raspberry Pi Foundation (b8:27:eb:xx:xx:xx) 的 MAC 地址,然後得到類似 “serial: ,並使用sed簡單地離開 MAC。
然後我想乙太網適配器也具有具有相同標頭的 MAC 地址。我的問題是,我怎樣才能僅獲取 RPi 無線適配器的 MAC 地址作為命令的輸出?
它將列印第一個無線 MAC(請注意,我不確定這些地址在無線上下文中是否稱為“MAC 地址”)
lshw -class network | awk '/usb:/ {ok=0} /network:/ {ok=1} /serial:/ {serial=$2} /capabilities: .*wireless/ && ok {print serial; exit}'
如果知道介面的名稱,可以用 ifconfig 查詢 MAC 地址
ifconfig wlan0 | grep HWaddr | cut -d ' ' -f 10-
ifconfig wlan0將僅列印有關該介面的資訊。
grep HWaddr將僅保留具有 MAC 地址的行
cut -d ’ ’ -f 10- 會將這一行拆分為空格,並為您提供第 10 個空格之後直到行尾的內容。