我在做一个小脚本,需要我的计算机当前连接的无线网络的BSSID,并将其存储在一个变量中。 如果我的问题很奇怪,我很抱歉--我对bash非常陌生--但我想知道这样的事情是否可行? 非常感谢。
如何通过bash获得当前连接网络的BSSID?
3
人关注
2
个评论
jkalden
:
Welcome to
堆栈溢出
!请看
如何提问
现在你的问题太宽泛了,我想!开始尝试,并告诉我们你在哪里卡住了,提供一个
最低限度的可重复的例子
!
到目前为止,你已经尝试了什么?你在哪里被卡住了?
Kyrie
发布于
2017-02-11
4
个回答
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
发布于
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:~#
linuxfan says Reinstate Monica
发布于
2019-06-23
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)