2016-04-07 3 views
1

So analysiert wird Ich bin derzeit einen Python-Skript-Scan für WiFi-Netzwerke mit und die Ergebnisse ausdrucken:Python und PHP nicht Ball spielen, nur sehr kleiner Teil

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>" 

Es sieht gut, wenn ich es versuchen in 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> 

, die von PHP wird dann verwendet:

<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> 

Leider jedoch, wenn ich auf die Website gehen, ist es nur Zeigt eine Option im Dropbox-Menü an. In meiner Frustration ließ ich den Python-Code über SSH laufen, um zu sehen, ob es funktionierte und was das Problem sein könnte. Als ich die Website direkt danach aktualisiert habe, sind alle Optionen aufgetaucht.

Dies scheint hartnäckig zu sein.

Um in der Lage zu sein, eine vollständige Liste zu erhalten, muss ich zuerst über SSH ausführen, bevor ich die Website aktualisieren und eine vollständige Liste anzeigen kann. Dies dauert etwa 10 Sekunden, danach erscheint nur die erste Option und es ist ein manueller Eingriff erforderlich.

Was könnte das Problem hier sein? Ich bin mit meinem Verstand hier Ende!

Danke !!

+0

In meinem Problembehandlungsmodus Ich dachte, es wäre vielleicht ein Apache2-Fehler, also habe ich stattdessen lighttpd installiert, das zeigt das gleiche Problem. – user5740843

Antwort

1

Das Skript, das von PHP über lighttpd ausgeführt wird, wird als www-data ausgeführt. Der Befehl iwlist benötigt Root-Rechte. Wenn es von einem Benutzer ausgeführt wird, der keine root-Rechte hat (www-data), gibt es nur die Informationen zurück, die sich auf das WLAN beziehen, mit dem Sie verbunden sind. Deshalb dachte ich, dass es funktionierte, aber nur eine Zeile ausgab Sie.

Natürlich, um das Risiko für Exploits auf dem System zu minimieren, starte ich Lighttpd nicht als root, noch gebe ich www-data root Privilegien.

Stattdessen haben bearbeitet meine sudoers-Datei nur diese spezifische Python-Skript zu haben, zu akzeptieren, wie sudo ausgeführt werden soll, indem Sie:

sudo visudo 

und das Hinzufügen dieser Zeile:

www-data ALL = (ALL) NOPASSWD: /home/var/www/html/cgi-bin/wifi-scan.py