我目前正在开发 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 个空格之后直到该行末尾的内容。