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