【问题标题】:iwlist scan output formatiwlist 扫描输出格式
【发布时间】:2010-09-13 18:35:33
【问题描述】:

我必须编写一个工具来从 iwlist 扫描中获取加密类型。我似乎无法找到是否有标准输出。谷歌搜索看起来人们发布的格式略有不同,但我不知道他们只是复制/粘贴错误还是什么。具体来说,在Encryption key: On 中,On/Off 的第一个字母总是大写吗? IE: IEEE 802.11i/WPA2 Version 1 怎么样?加密之前总是IEEE 802.11i/吗?

我希望可以在这里问。

【问题讨论】:

    标签: python linux parsing wifi


    【解决方案1】:

    由于/proc/net/wireless 只是显示有关当前 WLAN 连接的信息,我修改了一个脚本以包含例如必要的加密信息。饲料wpa_supplicant

    #!/bin/bash
    while read line; do
    
        ## Reset variables on new network
        [[ "$line" =~ Cell || "$line" == "" ]] && {
    
            # If no WPA encryption info was found though "Encryption" was "On", then we have WEP
            [[ "$encryption" == "" && "$enc" =~ On ]] && encryption = "WEP"
    
            # If we already found one network then echo its information
            [[ "$network" != "" ]] && echo "$network [$encryption]"
            network=""
            encryption=""
        }
    
        ## Test line content 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%% *}
        }
    
        ## Encryption is "On" if WEP or WPA, otherwise it's "Open"
        [[ "$line" =~ Encrypt ]] && enc=${line##*key:}
        [[ "$enc" =~ Off ]] && {
            [[ "$encryption" != "" ]] && encryption="${encryption},"
            encryption="${encryption}Open"
        }
    
        ## The ESSID is the last line of the basic channel data, so build information string now
        [[ "$line" =~ ESSID ]] && {
            essid=${line##*ID:}
            network="$mac  $essid  $frq  $chn  $qual  $lvl  $enc"  # output after ESSID
        }
    
        ## WPA encryption information
        [[ "$line" =~ WPA ]] && wpa=${line##*WPA} && {
            [[ "$encryption" != "" ]] && encryption="${encryption}|"
            encryption="${encryption}WPA$wpa"
        }
        [[ "$line" =~ "Group Cipher" ]] && encryption="$encryption,${line##*: }"
        [[ "$line" =~ "Pairwise Cipher" ]] && encryption="$encryption,${line##*: }"
        [[ "$line" =~ "Authentication Suites" ]] && encryption="$encryption,${line##*: }"
    
    done < <(iwlist wlan0 scan 2>/dev/null )
    

    脚本输出(示例):

    34:81:C7:EB:24:89  "cyberdyne"  2.462  11  67/70  -43  on [WPA2 Version 1,CCMP,CCMP,PSK]
    36:81:C7:EB:24:89  "cyberguest"  2.462  11  65/70  -45  on [WPA2 Version 1,TKIP,CCMP,PSK|WPA Version 1,TKIP,TKIP,PSK]
    

    如果 SSID 有多种加密机制可用,则它们由"|" 分隔。

    【讨论】:

    • 这做得很好。您可以通过注释掉network= 行并仅使用您想要的变量创建您自己的来轻松地从该脚本中缩小您想要的信息。如果您想摆脱加密类型的详细信息,也可以删除 echo "$network [$encryption]"[$encryption] 部分。
    【解决方案2】:

    根据您的需要,您最好解析/proc/net/wireless 的内容。 This 将帮助您入门。这些字段都是相同的,但值可能因驱动程序和设备而异。所以不,您可能不能依靠拼写保持一致,更不用说大写了。

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      相关资源
      最近更新 更多