CGI Probleme

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
H8Ball
Beiträge: 52
Registriert: 14.12.2010 16:00:33

CGI Probleme

Beitrag von H8Ball » 21.07.2015 09:46:12

Guten Morgen liebe Gemeinde.

Ich bin daran ein Webinterface für die Rufumleitung bei Asterisk zu erstellen.
Dieses wickle ich über CGI und Bash ab. (Mag sein das Perl oder Python die bessere Lösung wären, aber ich will es jetzt erst mal so bewerkstelligen, da ich die Zeit nicht habe um mir erst eine der beiden Sprachen zu Gemüte zu führen.)

Nun habe ich folgendes Problem...

Der Webserver verarbeitet die Daten nicht wie er soll. Ich lege zum Beispiel eine Variable "NAME" fest, diese soll dann mit echo ausgegeben werden, aber leider bleibt die Ausgabe lehr.
Wenn ich jedoch das Skript mit:

Code: Alles auswählen

sudo -u www-data bash -x rufumleitung 
ausführe, wird es an der entsprechenden Stelle ausgegeben.
Außerdem finden Entscheidungen per "if" nicht richtig statt, auf der Konsole ja, aber per Webserver, nein.

Fragt mich gerne was ihr an Code sehen wollt, ich liefere alles.

Vielen Dank schon mal.


MfG

Daniel

Benutzeravatar
heisenberg
Beiträge: 4203
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: CGI Probleme

Beitrag von heisenberg » 12.08.2015 02:12:21

Deine Frage ist sehr unpräzise. Du hast möglicherweise mehrere Probleme. Gehe eines nach dem anderen an. Wenn Du Probleme hast, frage bitte exakt zu einem Problem, bei dem Du nicht weiterkommen solltest und liefere bitte die benötigten Codeteile, Ausgaben, Ausschnitte aus Logfiles und Fehlermeldungen in Codetags oder Pastes mit.

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Re: CGI Probleme

Beitrag von Hendri » 14.08.2015 21:54:41

Hallo Daniel,

da ich ein ähnliches Phänomen auch schon mal hatte, glaube ich zu wissen, was das es sein kann...

Hast Du ein:

Code: Alles auswählen

echo "Content-type: text/html

"
vor der ersten Ausgabe Deines Scriptes drinnen?
ansonsten wird das nicht richtig angezeigt im Browser...
Ciao, Hendri

H8Ball
Beiträge: 52
Registriert: 14.12.2010 16:00:33

Re: CGI Probleme

Beitrag von H8Ball » 27.08.2015 19:14:27

Nein an dem Content-type liegt es nicht.

Ich habe ein neues Skript gebaut, hier genau das gleiche.

Es folgt das Skript das im Anschluss das wol.sh startet

Code: Alles auswählen

#!/bin/bash

echo 'Content-type: text/html'
echo ''
echo '<head>'
echo '<meta charset="utf-8">'
echo '<title>Computer starten &uuml;ber das Netzwerk</title>'
echo '</head>'
echo '<html>'
echo '<body>'
echo '<h1 align="center">Computer starten &uuml;ber das Netzwerk</h1>'
echo 'W&auml;hlen Sie den Computer, den Sie starten wollen, aus und dr&uuml;cken Sie >>Starten<<'
echo '</br>'
echo '</br>'
echo '<form action="wol.sh" method="post" name="rechner" enctype="multipart/form-data">'
echo '<select name="rechner">'
echo '<option value="00:0c:76:82:7f:1a">MSI-Server I</option>'
echo '</select>'
echo '<button type="subit">>>Starten<<</button>'
echo '</form>'
echo '<a href="http://192.168.8.252/cgi-bin/">zur&uuml;ck</a>'
echo '</body>'
echo '</html>'
das läuft.

Hier das zweite Skript

Code: Alles auswählen

#!/bin/bash
data=$(cat)
rechner=$(echo $data |awk -F '"rechner" ' '{print $2}' |awk -F ' ' '{print $1}')
pc="$rechner"

echo 'Content-type: text/html'
echo ''
echo '<html>'
echo '<meta http-equiv="Refresh" content="1; url=http://192.168.8.252/cgi-bin/wol">'
echo '</html>'

wakeonlan $pc
Hier die Ausgabe von bash -x wol.sh

Code: Alles auswählen

root@raspberrypi:/usr/lib/cgi-bin# bash -x wol.sh
++ cat
------WebKitFormBoundarykaaj2sBDPU8uBwaW Content-Disposition: form-data; name="rechner" 00:0c:76:82:7f:1a ------WebKitFormBoundarykaaj2sBDPU8uBwaW--
+ data='------WebKitFormBoundarykaaj2sBDPU8uBwaW Content-Disposition: form-data; name="rechner" 00:0c:76:82:7f:1a ------WebKitFormBoundarykaaj2sBDPU8uBwaW--'
++ echo ------WebKitFormBoundarykaaj2sBDPU8uBwaW Content-Disposition: 'form-data;' 'name="rechner"' 00:0c:76:82:7f:1a ------WebKitFormBoundarykaaj2sBDPU8uBwaW--
++ awk -F ' ' '{print $1}'
++ awk -F '"rechner" ' '{print $2}'
+ rechner=00:0c:76:82:7f:1a
+ pc=00:0c:76:82:7f:1a
+ echo 'Content-type: text/html'
Content-type: text/html
+ echo ''

+ echo '<html>'
<html>
+ echo '</html>'
</html>
+ echo 00:0c:76:82:7f:1a
00:0c:76:82:7f:1a
+ echo ------WebKitFormBoundarykaaj2sBDPU8uBwaW Content-Disposition: 'form-data;' 'name="rechner"' 00:0c:76:82:7f:1a ------WebKitFormBoundarykaaj2sBDPU8uBwaW--
------WebKitFormBoundarykaaj2sBDPU8uBwaW Content-Disposition: form-data; name="rechner" 00:0c:76:82:7f:1a ------WebKitFormBoundarykaaj2sBDPU8uBwaW--
+ wakeonlan 00:0c:76:82:7f:1a
Sending magic packet to 255.255.255.255:9 with 00:0c:76:82:7f:1a
root@raspberrypi:/usr/lib/cgi-bin#
und hier die Ausgabe des Skripts über den Webserver
Usage wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware_address] ...] Options -h this information -v displays the script version -i ip_address set the destination IP address default: 255.255.255.255 (the limited broadcast address) -p port set the destination port default: 9 (the discard port) -f file uses file as a source of hardware addresses See also wakeonlan(1)
.

Wie man sieht ist die Variable pc wieder leer wenn es vom Webserver ausgeführt wird.

H8Ball
Beiträge: 52
Registriert: 14.12.2010 16:00:33

Re: CGI Probleme

Beitrag von H8Ball » 30.08.2015 17:48:11

Heute kam mir mal noch eine Idee.

Ich habe mal debugging in Apache aktiviert, und das debugging in meinem Skript aktiviert.

Und siehe da ...

Code: Alles auswählen

++ cat
+ data='------WebKitFormBoundaryTPbIR24KnukSUFQP
Content-Disposition: form-data; name="rechner"

00:0c:76:82:7f:1a
'-----WebKitFormBoundaryTPbIR24KnukSUFQP--
++ awk -F '"rechner" ' '{print $2}'
++ awk -F ' ' '{print $1}'
' $'\r' $'00:0c:76:82:7f:1a\r' $'------WebKitFormBoundaryTPbIR24KnukSUFQP--\r'rm-data;' 'name="rechner"
+ rechner=
+ pc=
+ echo 'Content-type: text/html'
+ echo ''
+ echo '<html>'
+ echo '</html>'
' $'\r' $'00:0c:76:82:7f:1a\r' $'------WebKitFormBoundaryTPbIR24KnukSUFQP--\r'm-data;' 'name="rechner"
+ wakeonlan
Intern werden die Variablen ganz anders verarbeitet.

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Re: CGI Probleme

Beitrag von Hendri » 31.08.2015 21:37:18

Ja, das parsing der übergebenen Variablen muss schon Bein bash script übernehmen!
Einfacher als das cat am Anfang scheint mir die Werte aus der Variable

Code: Alles auswählen

$QUERY_STRING
zu übernehmen...
Ein paar Beispiele kannst Du hier finden.
Ciao, Hendri

Antworten