添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

3 人关注

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

2 个评论
Welcome to 堆栈溢出 !请看 如何提问 现在你的问题太宽泛了,我想!开始尝试,并告诉我们你在哪里卡住了,提供一个 最低限度的可重复的例子 !
到目前为止,你已经尝试了什么?你在哪里被卡住了?
linux
bash
Kyrie
Kyrie
发布于 2017-02-11
4 个回答
pqnet
pqnet
发布于 2019-06-23
已采纳
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')
    
Stoian Ivanov
Stoian Ivanov
发布于 2019-06-23
0 人赞同

在2022年,通过iw工具的答案是

iw dev <device> link

我在连接到 SomeWiFi 与BSSID 18:e8:29:6e:e1:4a 时的当前状态。

root@sdr-lt:~# iw dev wlp0s20f3 link 
Connected to 18:e8:29:6e:e1:4a (on wlp0s20f3)
SSID: SomeWiFi
freq: 5220
RX: 82053829 bytes (116477 packets)
TX: 23572821 bytes (41359 packets)
signal: -53 dBm
rx bitrate: 400.0 MBit/s VHT-MCS 9 40MHz short GI VHT-NSS 2
tx bitrate: 400.0 MBit/s VHT-MCS 9 40MHz short GI VHT-NSS 2
bss flags:      short-slot-time
dtim period:    3
beacon int:     100
root@sdr-lt:~# 
    
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)