iwlist扫描输出格式
我需要写一个工具,从iwlist扫描中提取加密类型。但是我找不到一个标准的输出格式。网上搜索了一下,发现大家发布的格式稍微有点不同,我也搞不清楚是复制粘贴错了,还是怎么回事。具体来说,在Encryption key: On
中,On
和Off
的首字母总是大写吗?还有IE: IEEE 802.11i/WPA2 Version 1
呢?加密类型前面总是会有IEEE 802.11i/
吗?
我希望在这里问这个问题是可以的。
2 个回答
3
因为 /proc/net/wireless
只是显示当前无线网络连接的信息,所以我调整了一个脚本,让它包含一些加密信息,这些信息是用来给 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)有多种加密方式可用,它们会用 "|"
来分隔。
1
根据你的需求,直接解析 /proc/net/wireless
的内容可能会更好。这个链接可以帮助你入门。里面的字段都是一样的,但不同的驱动程序和设备的数值可能会有所不同。所以,不要指望拼写会保持一致,大小写就更不靠谱了。