使用bash解析iwlist扫描

时间:2014-08-19 23:53:53

标签: linux bash shell awk

我需要在无线客户端cpe中运行自定义命令以获取以下数据

ESSID,MAC,FREQUENCY,QUALITY,LEVEL,NOISE。

XM.v5.5.8# iwlist ath0 scanning
ath0      Scan completed :
          Cell 01 - Address: DC:9F:DB:08:49:DE
                    ESSID:"Satek"
                    Mode:Master
                    Frequency:5.54 GHz (Channel 108)
                    Quality=28/94  Signal level=-68 dBm  Noise level=-92 dBm
                    Encryption key:on
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Extra:bcn_int=100
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Extra:mtik_ie=dd2a000c42000000011e0014000000661a05000041502d43454e54524f2d35000000000000000000

我尝试使用其他论坛的代码

XM.v5.5.8# iwlist ath0 scanning | awk -F '[ :=]+' '/(ESS|Freq|Qual)/{ printf $3" " } /Encr/{ print $4 }'
"Satek" 5.54 28/94 on
"Satek" 5.57 14/94 on
"Satek" 5.6 13/94 on
"Satek" 5.61 9/94 on
"Satek" 5.64 36/94 on
"Satek" 5.68 26/94 on
"Satek" 5.7 9/94 on
"IVICA" 5.825 17/94 on

几乎所有我需要的东西,但我不知道如何获得其他项目,如mac地址信号电平和噪音。

1 个答案:

答案 0 :(得分:5)

要解析所需值格式的差异,您需要awk scriptbash script才能获得获取所有值所需的灵活性。 (你可以在一行中完成,但它会非常混乱)。这是一个bash脚本,它将解析iwlist并输出mac essid frq chn qual lvl enc。我没有Noise,但如果您愿意,可以按照格式添加它。

根据需要使用命令行。例如。 iwlist 'iface' scan | bash parseiwl.sh(其中&{39; iface'ath0parseiwl.sh只是我保存脚本的名称)。 注意:由于使用[[]]=~,此脚本无法移植,因此仅在bash中使用:

#!/bin/bash

## print header lines
echo ""
echo " mac                 essid         frq   chn qual   lvl  enc"

while IFS= read -r line; do

    ## test line contenst and parse as required
    [[ "$line" =~ Address ]] && mac=${line##*ss: }
    [[ "$line" =~ \(Channel ]] && { chn=${line##*nel }; chn=${chn:0:$((${#chn}-1))}; }
    [[ "$line" =~ Frequen ]] && { frq=${line##*ncy:}; frq=${frq%% *}; }
    [[ "$line" =~ Quality ]] && { 
        qual=${line##*ity=}
        qual=${qual%% *}
        lvl=${line##*evel=}
        lvl=${lvl%% *}
    }
    [[ "$line" =~ Encrypt ]] && enc=${line##*key:}
    [[ "$line" =~ ESSID ]] && {
        essid=${line##*ID:}
        echo " $mac  $essid  $frq  $chn  $qual  $lvl  $enc"  # output after ESSID
    }

done

示例:

sudo iwlist wlp23s0 scan | bash parseiwl.sh

mac                 essid         frq   chn qual   lvl  enc
00:14:D1:C6:C8:6F  "skyline_633"  2.442  7  54/70  -56  on