如何通过bash获取当前连接网络的BSSID?

时间:2017-02-11 08:47:46

标签: linux bash

我正在创建一个小脚本,需要我的计算机当前连接的无线网络的BSSID并将其存储在变量中。 如果我的问题很奇怪,我很抱歉 - 我对bash很新 - 但我想知道这样的事情是否可能? 非常感谢。

3 个答案:

答案 0 :(得分:0)

要获取接入点的ESSID:

iwconfig 2>/dev/null |grep ESSID |cut -d: -f2

完成这项工作。这可以通过其他方式获得BSSID。

获取BSSID的方法涉及其他步骤。首先:

a=$(route -n |grep ^0.0.0.0)

获取默认路线;在我的情况下,结果是" 0.0.0.0 192.168.1.1 ..."。然后

gw=$(echo $a |cut -d" " -f2)

获取网关192.168.1.1。然后使用arp我们可以得到硬件地址:

rout=$(arp -a |grep $gw)

返回有关网关的记录," 192.168.1.1 0x1 0x2 58:98:35:..."在我的情况下。提取硬件地址:

hwadr=$(echo $rout |cut -d" " -f4)

我不确定上述步骤在任何情况下是否总是正确的,但我没有找到任何其他方法。希望它有所帮助。

答案 1 :(得分:0)

实用程序iwconfig将在接口报告的第二行中将BSSID显示为"接入点"。例如在我的系统中:

wlp2s0    IEEE 802.11  ESSID:"My WIFI"
          Mode:Managed  Frequency:2.437 GHz  Access Point: 12:34:56:78:9A:BC
          Bit Rate=1 Mb/s   Tx-Power=15 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=31/70  Signal level=-79 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:719  Invalid misc:1972   Missed beacon:0

您可以使用

过滤掉它
iwconfig wlp2s0 | sed -n 's/.*Access Point: \([0-9\:A-F]\{17\}\).*/\1/p'

如果它与您的接口名称不同,显然会替换wlp2s0。如果要将其保存到变量中,只需将所有行放在$()中并将其分配给您想要的变量:

BSSID=$(iwconfig wlp2s0 | sed -n 's/.*Access Point: \([0-9\:A-F]\{17\}\).*/\1/p')

答案 2 :(得分:0)

对于DD-WRT:

wl -i eth1状态| grep'BSSID'| grep -o -E'([[:xdigit:]] {1,2}:){5} [[:xdigit:]] {1,2}'