如何使用bash以可访问的方式构建一个脚本,以便为每个网络单独存储Channel,BSSID和ESSID

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我目前正在使用kali Linux 2.0开发一个bash脚本项目。我的脚本基本上扫描网络,当它找到一个时,它应该以某种方式将它的ESSID,BSSID和Channel存储在一起。然后它在每个网络的命令中使用BSSID,ESSID和Channel。我做了最好的研究,我找到了如何为每个网络存储这些细节。我知道这可以通过创建数据库或表来完成,尽管我对它们的了解非常有限。所以我试图使用grep和awk -

`b=$(iwlist <interface> scan|grep Address|awk '{ print $5 }')
echo $b`

以下列顺序输出bssids -

`xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx xx:xx:xx:xx:xx:xx`

并且没有使用grep和awk过滤:

`wlan2 Scan completed : 
Cell 01 - Address: xx:xx:xx:xx:xx:xx 
Channel:xx 
Frequency:2.462 GHz (Channel xx) 
Quality=24/70 
Signal level=-86 dBm 
Encryption key:on 
ESSID:"xxxx" 
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s 24 Mb/s; 36 Mb/s; 54 Mb/s Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s 
Mode:Master`

但它对我帮助不大。而不是我想要它是这样的:

`bssid1=xx:xx:xx:xx:xx:xx
chan1=X
 bssid2=xx:xx:xx:xx:xx:xx
chan2=x
.
.
.
.`

并且脚本中这些变量的数量将随扫描的网络数量而增加。我的问题是,我如何构建一个脚本来为每个网络单独存储一个Channel,BSSID和ESSID作为变量使用bash?

提问于
用户回答回答于

对于DD-WRT,这对我有用:

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

包含在后备词撇号中。如果使用5GHz接口,您可能必须将eth1更改为eth2。

用户回答回答于

一种可能的方法是使用bash数组和while循环。这是一种方法:

declare -a bsids
declare -a channels
declare -a essids

ind=-1
while read line; do
    case $line in
        Cell*)
            ((ind++))
            bsids[$ind]=${line##* }
            ;;
        Channel*)
            channels[$ind]=${line##*:}
            ;;
        ESSID*)
            essids[$ind]=${line##*:}
            ;;
    esac
done < <(iwlist <iface> scan)

那么你将拥有3个可以访问的阵列

printf "BSID 1: %s\n" "${bsids[0]}"
printf "CHANNEL 1: %s\n" "${channels[0]}"
printf "ESSID 1: %s\n" "${essids[0]}"

扫码关注云+社区

领取腾讯云代金券