【发布时间】:2015-03-10 21:23:02
【问题描述】:
我有以下通过 OSC 发送 iwlist 扫描结果的脚本:
#!/bin/bash
NUM_BANKS=20
while [[ "$input" != "\e" ]] ; do
networks=$(iwlist wlan0 scanning | awk 'BEGIN{ FS="[:=]"; OFS = " " }
/ESSID/{
#gsub(/ /,"\\ ",$2)
#gsub(/\"/,"",$2)
essid[c++]=$2
}
/Address/{
gsub(/.*Address: /,"")
address[a++]=$0
}
/Encryption key/{ encryption[d++]=$2 }
/Quality/{
gsub(/ dBm /,"")
signal[b++]=$3
}
END {
for( c in essid ) { print "/wlan_scan ",essid[c],signal[c],encryption[c] }
}'
)
read -t 0.1 input
echo "$networks" | while read network; do
set $network
hash=` echo "$2" | md5sum | awk '{ print $1 }'| tr '[:lower:]' '[:upper:]'`
bank=`echo "ibase=16;obase=A; $hash%$NUM_BANKS " | bc`
echo "$1$bank $2 $3 $4"
echo "$1$bank $2 $3 $4" | sendOSC -h localhost 9997
done
#echo "$networks" | sendOSC -h localhost 9997
done
此输出的一个示例是“/wlan_scan13 BTHomehub757 -85 On”,然后通过 sendOSC 程序发送。
我基本上需要用这个tshark扫描的结果替换iwlist扫描数据:
sudo tshark -I -i en1 -T fields -e wlan.sa_resolved -e wlan_mgt.ssid -e radiotap.dbm_antsignal type mgt subtype probe
类似地输出两个字符串和一个int,输出结果如下:
'Hewlett-_91:fa:xx EE-BrightBox-mjmxxx -78'.
所以最终我希望脚本在这个
实例中给我一个输出'/wlan13 Hewlett-_91:fa:xx EE-BrightBox-mjmxxx -78'.
两种扫描都以大致相同的速率不断生成这种格式的结果,并随着检测到新的 wifi 路由器而更新,并在它们通过 sendOSC 程序到达时立即发送出去。
对于经验丰富的编码人员来说,这可能是一个非常简单的编辑,但我已经尝试解决这个问题好几天了,我想我应该寻求帮助!
如果有人能澄清什么需要留下,什么需要去这里,我真的很感激。
非常感谢。
【问题讨论】:
-
如果您提高问题的信噪比并提供样本输入和输出数据,您获得帮助的机会就会大得多。
-
我同意上述评论,但回顾您的历史,加上 uno 实际上在您的问题中有一些代码并且您的坚持。但是我们需要一些样本
tshark输出以及您对该数据的预期输出。祝你好运。 -
这是个好建议,谢谢。我刚刚编辑了这篇文章,以提供原始脚本输出和 tshark 输出的示例。