首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析iw wlan0扫描输出

解析iw wlan0扫描输出
EN

Stack Overflow用户
提问于 2013-07-23 20:13:50
回答 7查看 31.9K关注 0票数 12

我编写了wlan管理器脚本来处理开放的/ad-hoc/wep/WPA2网络。现在我正在尝试解析iw wlan0扫描输出,以便在我的脚本中获得更好的扫描功能。我的目标是获得如下输出:

代码语言:javascript
复制
SSID        channel     signal      encryption
wlan-ap     6           70%         wpa2-psk
test        1           55%         wep

我已经实现了如下输出:

代码语言:javascript
复制
$ iw wlan0 scan | grep 'SSID\|freq\|signal\|capability' | tac
SSID: Koti783
signal: -82.00 dBm
capability: ESS Privacy ShortPreamble SpectrumMgmt ShortSlotTime (0x0531)
freq: 2437

我一直在尝试学习bash/sed/awk,但还没有找到一种方法来实现我正在尝试的东西。那么,实现这一目标的好方法是什么呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-07-26 19:47:49

这是我基于Sudo_O answer的最终解决方案

代码语言:javascript
复制
$1 == "BSS" {
    MAC = $2
    wifi[MAC]["enc"] = "Open"
}
$1 == "SSID:" {
    wifi[MAC]["SSID"] = $2
}
$1 == "freq:" {
    wifi[MAC]["freq"] = $NF
}
$1 == "signal:" {
    wifi[MAC]["sig"] = $2 " " $3
}
$1 == "WPA:" {
    wifi[MAC]["enc"] = "WPA"
}
$1 == "WEP:" {
    wifi[MAC]["enc"] = "WEP"
}
END {
    printf "%s\t\t%s\t%s\t\t%s\n","SSID","Frequency","Signal","Encryption"

    for (w in wifi) {
        printf "%s\t\t%s\t\t%s\t%s\n",wifi[w]["SSID"],wifi[w]["freq"],wifi[w]["sig"],wifi[w]["enc"]
    }
}'

输出:

代码语言:javascript
复制
$ sudo iw wlan0 scan | awk -f scan.awk
SSID        Frequency   Signal      Encryption
netti       2437        -31.00 dBm  Open
Koti783     2437        -84.00 dBm  WPA
WLAN-AP     2462        -85.00 dBm  WPA
票数 12
EN

Stack Overflow用户

发布于 2013-07-23 20:39:15

尝试解析供人类阅读(而不是机器解析)的程序的复杂输出通常是一种糟糕的做法。

例如,根据系统的语言设置和/或iw版本的不同,iw的输出可能会发生变化,留下的“管理器”只能在您的开发机器上运行。

相反,您可以使用iw用来获取信息的相同接口:库后端libnl

您可能还想看看wireless-tools (iwconfigiwlist等)。使用libiw库的。

票数 8
EN

Stack Overflow用户

发布于 2013-07-23 20:45:22

下面是一个GNU awk脚本,用于获取每个唯一is的SSID和通道:

代码语言:javascript
复制
/^BSS / {
    MAC = $2
}
/SSID/ {
    wifi[MAC]["SSID"] = $2
}
/primary channel/ {
    wifi[MAC]["channel"] = $NF
}

# Insert new block here

END {
    printf "%s\t\t%s\n","SSID","channel"

    for (w in wifi) {
        printf "%s\t\t%s\n",wifi[w]["SSID"],wifi[w]["channel"]
    }
}

考虑到你所做的所有研究,为信号和加密添加新的块对你来说应该很容易。

将脚本保存到wifi.awk等文件中,然后像这样运行:

代码语言:javascript
复制
$ sudo iw wlan0 scan | awk -f wifi.awk

输出将采用请求的格式化格式:

代码语言:javascript
复制
SSID        channel
wlan-ap     6
test        1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17809912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档