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

Linux 如何通过bash获取当前连接网络的BSSID?,linux,bash,Linux,Bash,我正在制作一个小脚本,它需要我的计算机当前连接到的无线网络的BSSID,并将其存储在一个变量中。 如果我的问题很奇怪,我很抱歉——我对bash很陌生——但我想知道这样的事情是否可能发生? 非常感谢。要获取接入点的ESSID,请执行以下操作: iwconfig 2>/dev/null |grep ESSID |cut -d: -f2 他做这项工作。这对于通过其他方式获取BSSID可能很有用 获取BSSID的方法包括其他步骤。首先: a=$(route -n |grep ^0.0.0.0)

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

要获取接入点的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…”。然后

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

rout=$(arp -a |grep $gw)
hwadr=$(echo $rout |cut -d" " -f4)
返回关于网关的记录,在本例中为“192.168.1.1 0x1 0x2 58:98:35:…”。要提取硬件地址,请执行以下操作:

rout=$(arp -a |grep $gw)
hwadr=$(echo $rout |cut -d" " -f4)

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

实用程序
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')
对于DD-WRT:


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

欢迎使用!请看,我想现在你的问题太宽泛了!让startet试着告诉我们你在哪里被卡住了,因为你提供了一个!虽然这适用于大多数家用电器,但路由器的硬件地址可能不同于接入点(例如,接入点充当网桥)。