0

我需要确定我设备的 MAC(硬件)地址,即用于 wifi 的地址。我在 Android 设备上使用 Termux,尽管答案可能更普遍。

我正在使用 python,但任何 bash 也可以。

在某些 2017 年的设备上,以下功能曾经有效:

import subprocess
result = subprocess.run(['ip','link'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
rc,so, se = result.returncode, result.stdout, result.stderr
assert not rc
ipl = re.split('\n[^ ]+ ', so, re.MULTILINE)
wlanl = [L for L in ipl if L.startswith('wlan0')]
assert wlanl
HWadd = re.findall('link/ether (.*?) ',wlanl[0])[0].lower()

但是,这在 2019 年的新设备上奇怪地失败了(我无法让 re.split 像我预期的那样工作)。

相反,我现在有一个几乎同样笨拙的替代方案:

import subprocess
result = subprocess.run(['ip','link'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
rc,so, se = result.returncode, result.stdout, result.stderr
assert not rc
ipl =  re.findall('\n[0-9]+: wlan0:.*?\n +link/ether ([^\n]*?) .*?\n', so, re.MULTILINE+ re.DOTALL) 
assert ipl
HWadd = ipl[0].lower()

有没有更可靠的方法从某处的操作系统中提取这些信息?

顺便说一句,使用termux-wifi-connectioninfo给出:

"mac_address": "02:00:00:00:00:00"
4

1 回答 1

0

我没有尝试您的 Python 示例,但是您在 bash 中所做的工作:

~ $ ip link | grep -A1 wlan0
25: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 3000
    link/ether aa:bb:cc:11:22:33 brd ff:ff:ff:ff:ff:ff

还有一个添加更多实用程序的功能请求,如果添加它就可以做到这一点ifdata -ph wlan0

于 2019-10-23T06:45:36.633 回答