Ip Adresse eines embedded Linux über CGI ändern

@lienX

@lienX

User of the Reset
Hallo,

ich bastle gerade an einem CGI-Script, das es mir ermöglicht im Browser Netzerksettings vorzunehmen.

Die Eingaben werden dann mit Hilfe eines CGI-Scripts in eine Datei geschrieben.

Das Embeddet Linux läd beim nächsten Neustart die Settings aus dieser Datei.

Mein Problem ist nun dass ich es nicht schaffe den String mit den übergebenen Werten in die einzelnen Werte zu trennen.

Danke für eure Vorschläge.


Hier ist die HTML-Datei
(besser_3.htm)

Code:
<HTML>
<HEAD>
<TITLE>Netzwerkssetup</TITLE>
</HEAD>
<BODY>
<H1>Eingabe der neuen Netzwerkeinstellung</H1>


<FORM method="get" action="besser_3_ausw.cgi">
Geben sie die IP Adresse an:
<input type="text" name="IPADRESSE">
Geben sie die Netzmaske an:
<input type="text" name="NETZMASKE">
Geben sie den Gateway an:
<input type="text" name="GATEWAY">
Geben sie den Hostnamen an:
<input type="text" name="HOSTNAME">
Geben sie den Domainamen an:
<input type="text" name="DOMAINNAME">


<br>

<HR>
<input type="submit" value="Neue Werte übernehmen">

</FORM>
<HR>

</BODY>
</HTML>

Hier die CGI datei
(besser_3_ausw.cgi)

Code:
#!/bin/ash
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<HEAD>"
echo "<TITLE>Netzwerkssetup</TITLE>"
echo "</HEAD>"
echo "<BODY>"
echo "<H1>Ausgabe der neuen Netzwerkseinstellungen</H1><br>"

echo "Die neuen Netzwerkseinstellungen sind nun geschrieben.<br>"
echo "Sie werden erst nach einen neustart des Systems aktiv.<br>"
echo "Bitte beachten sie, dass sich ihr Computer in dem gleichen Netz befinden muss.<br>"
echo "Nach Überprüfung der Angaben bitte auf Neustart klicken oder auf zurück um neue einzugebn.<br>"

IPADRESSE=$QUERY_STRING

echo "Ihre lokale zugriffsip ist: ${REMOTE_ADDR} <br>"


sed -e s/IPADDR_0=192.168.1.*/IPADDR_0=${IPADRESSE}/g rcS.work > rcS.neu
echo "Die Ip des Boards ist jetzt: ${IPADRESSE} <br>"
echo "<A href="./reboot.cgi">Neustart des Boards!</a><br>"


echo "</BODY>"
echo "</HTML>"

[/CODE]

Hier wäre noch die Endtextdatei:
(rcS.work)

Code:
#
#   Defaults for the boot scripts in /etc/rcS.d
#
# Time files in /tmp are kept in days.
TMPTIME=0
# Set to yes if you want sulogin to be spawned on bootup
SULOGIN=no
# Set to no if you want to be able to login over telnet/rlogin
# before system startup is complete (as soon as inetd is started)
DELAYLOGIN=no
# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
UTC=no
# Set VERBOSE to "no" if you would like a more quiet bootup.
VERBOSE=yes
# Set EDITMOTD to "no" if you don't want /etc/motd to be editted automatically
EDITMOTD=yes
#
# Contec Defaults
#
# Should Hostname be set?
HOSTNAMESET=yes
# Hostname
HOSTNAME=micro9
# Domain
DOMAIN=contec-int.at
# Should Realtime started? 
REALTIME=yes
# Should CODESYS application started? 
CODESYS=yes
# Should Watchdog started? 
WDTD=yes
# Should USVD started? 
USVD=no
# Should Mouse start on MW?
MOUSE=yes
# Mouse Type?
MOUSE_TYPE=ps2
# Mouse Port?
MOUSE_PORT=/dev/mouse
# Should DHCPCD started?
DHCPCD=no
# Should Network started
NETWORKSET=yes
# Network var
INTERFACE_0=eth0
IPADDR_0=192.168.1.218
ETMASK_0=255.255.255.0
NETWORK_0=192.168.1.0
BROADCAST_0=192.168.1.255
GATEWAY_0=192.168.1.2
# Should Mail started ?
PLCMAIL=yes
# Mail-Configuration Server
MAILSERVER=192.168.1.221
# Mail-Configuration from mail
FROMMAIL=test.user@contec.com
# Should SCREENSAVER started?
SCREENSAVER=no
# SCREENSAVER_TIMEOUT?
SCREENSAVER_TIME=100
# SCREENSAVER_OFF_TIMEOUT?
SCREENSAVER_OFF=100

# Is linux unconfigured ?
UNCONFIGURED=no
#



Jemand ne idee?
es geht ja nur noch darum
IPADRESSE=$QUERY_STRING
richtig zu zerlegen.
 
Zuletzt bearbeitet:
Wie sieht denn $QUERY_STRING in Deinem Fall aus?

Gruss, Xanti
 
string

er würde ungefär so aussehen:

Code:
QUERY_STRING:

IPADRESSE=192.168.1.218&NETZMASKE=255.255.255.0&GATEWAY=192.168.1.2&HOSTNAME=hostest&DOMAINNAME=domaintest

Es ist aber zu beachten das nicht von immer gleichlangen Werten ausgegangen werden kann.
(Da z.b. die Ip Adresse oder domain andere längen haben können)

Als Trenner eigenet sich das & meiner Meinung.?
 
Hmm, in perl wäre es eleganter, aber trotzdem hier mein Vorschlag:

Code:
[~]$ IFS=\&
[~]$ set $QUERY_STRING
[~]$ while [ $1 ]; do eval $1; shift; done
[~]$ unset IFS
[~]$ echo $NETZMASKE $GATEWAY $HOSTNAME $DOMAINNAME
255.255.255.0 192.168.1.2 hostest domaintest

Gruss, Xanti

edit: Kleine Korrektur, da Denkfehler meinerseits.
 
Zuletzt bearbeitet:
Schon Viel Besser!

Danke das hat mir viel geholfen!
Hoffe ich kann den Rest jetzt noch selber fertig basteln.

DANKE :)

Poste mal die fast fertige cgi.

Code:
#!/bin/ash
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<HEAD>"
echo "<TITLE>Netzwerkssetup</TITLE>"
echo "</HEAD>"
echo "<BODY>"
echo "<H1>Ausgabe der neuen Netzwerkseinstellungen</H1><br>"

echo "Die neuen Netzwerkseinstellungen sind nun geschrieben.<br>"
echo "Sie werden erst nach einen neustart des Systems aktiv.<br>"
echo "Nach Überprüfung der Angaben bitte auf Neustart klicken oder auf zurück um neue Werte einzugeben.<br>"

######IPADRESSE=$QUERY_STRING



IFS=\&
set $QUERY_STRING
while [ $1 ]; do eval $1; shift; done
unset IFS
######echo $IPADRESSE $NETZMASKE $GATEWAY $HOSTNAME $DOMAINNAME

sed -e s/IPADDR_0=.*/IPADDR_0=${IPADRESSE}/g rcS.work > rcS.neu
sed -e s/ETMASK_0=.*/ETMASK_0=${NETZMASKE}/g rcS.neu > rcS.neu2
sed -e s/GATEWAY_0=.*/GATEWAY_0=${GATEWAY}/g rcS.neu2 > rcS.neu3
sed -e s/HOSTNAME=.*/HOSTNAME=${HOSTNAME}/g rcS.neu3 > rcS.neu4
sed -e s/DOMAIN=.*/DOMAIN=${DOMAINNAME}/g rcS.neu4 > rcS.neu5

echo ""

echo "Die Ip des Boards ist jetzt: ${IPADRESSE} <br>"
echo "Die Netzwerkmaske des Boards ist jetzt: ${NETZMASKE} <br>"
echo "Der Gateway des Boards ist jetzt: ${GATEWAY} <br>"
echo "Der Hostname des Boards ist jetzt: ${HOSTNAME} <br>"
echo "Die Domain des Boards ist jetzt: ${DOMAINNAME} <br>"


echo "Ihre lokale zugriffsip ist: ${REMOTE_ADDR} <br>"
echo "Beachten sie bitte, das sie sich im gleichen Netz wie das Board aufhalten."
echo "<A href="./reboot.cgi">Neustart des Boards!</a><br>"


echo "</BODY>"
echo "</HTML>"
 

Ähnliche Themen

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

Windows clients können nicht mehr auf lange laufendes System zugreifen

dovecot und postfix Konfiguration Problem

NagiosGrapher 1.7.1 funktioniert nicht

Rollei Mini Wifi Camcorder

Zurück
Oben