因此,我目前正在使用Python脚本扫描WiFi网络并打印出结果:
from subprocess import check_output
scanoutput = check_output(["iwlist", "wlan0", "scan"])
print '<select name="ssid">'
for line in scanoutput.split("\n"):
line = line.strip()
if line.startswith("ESSID:"):
line=line[7:-1]
print '<option value="' + line + '">' + line + </option>'
print "</select>"
我在SSH中尝试时看起来不错:
<select name="ssid">
<option value="easybell DSL">easybell DSL</option>
<option value="FRITZ!Box Fon WLAN 7360 SL_EXT">FRITZ!Box Fon WLAN 7360 SL_EXT</option>
<option value="WLAN-519293">WLAN-519293</option>
<option value="NoTrespassing">NoTrespassing</option>
<option value="Cinque">Cinque</option>
<option value="EasyBox-738461">EasyBox-738461</option>
<option value="FRITZ!Box WLAN 3270">FRITZ!Box WLAN 3270</option>
</select>
然后由PHP使用:
<form action="/cgi-bin/process.py" method="get">
<?php $output=shell_exec("/usr/bin/python cgi-bin/wifi-scan.py"); print_r($output);?>
<input type="password" value="password" name="psk" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Password';}">
<div class="submit"><input type="submit" onclick="myFunction(){shell_exec("process.py")}" value="Connect" ></div>
</form>
但是,令人遗憾的是,当我进入网站时,它仅在Dropbox菜单中显示一个选项。令我沮丧的是,我通过SSH运行了Python代码,以查看它是否有效以及可能是什么问题。当我直接刷新网站后,所有选项都显示出来。
这似乎是持久的。
为了获得完整列表,我首先需要通过SSH运行它,然后才能刷新站点并查看完整列表。这将持续大约10秒钟,此后仅再次显示第一个选项,并且需要手动干预。
这可能是什么问题?我的智慧到此为止!
谢谢!!
该脚本由PHP在lighttpd上实现,以www-data运行。命令iwlist需要root特权。如果它是由没有root权限(www-data)的用户执行的,则它仅返回有关您所连接的wifi的信息,这就是为什么我认为它可以正常工作,但只输出一行而不是全部输出的原因。他们。
当然,为了最大程度地降低利用该系统的风险,我不会以root用户身份启动lighttpd,也不会赋予www-data root用户特权。
相反,通过执行以下操作,编辑了我的sudoers文件以接受仅将此特定python脚本作为sudo运行:
sudo visudo
并添加以下行:
www-data ALL = (ALL) NOPASSWD: /home/var/www/html/cgi-bin/wifi-scan.py
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句