IP Adresse via Webinterface ändern

  • [font="Arial"]Hey,[/font]
    Ich möchte mir gerne eine Weboberfläche basteln mit der ich ganz bequem die IP-Adresse meines RPi´s ändern oder DHCP Aktivieren kann. Wie beispielsweise einem W-Lan Router oder sonstigen Netzwerkgerät. Ich habe mir schon eine php seite gebastelt wo mir beim aufruf die aktuellen einstellungen wie IP-Adresse, Subnetmaske, Gateway und Mac-Adresse angezeigt wir.
    Jetzt habe ich noch Eingabefelder erstellt (IP-Adresse, Subnetmaske, Gateway) die beim drücken des Buttons "Speichern" vom Raspberry übernommen werden sollen.


    Normal habe ich die IP-Adresse immer mit

    Code
    nano /etc/network/interfaces


    geändert und das netzwerk neu gestartet.


    Meine lösung währe diese gewesen. Ich schreibe von meinen PHP-eingabefeldern nach drücken des Buttons "Speichern" die Netzwerkkonfig zeilenweise in eine txt datei (Ist für mich jetzt kein thema und funktioniert auch). Meine /etc/network/interfaces sieht dann so aus[font="Monaco, Consolas, Courier, monospace"]:[/font]



    [font="Arial"]funktioniert nicht....... ist mir auch irgendwie klar, da es sich bei /etc/network/interfaces nicht um eine bash script handelt. Ich kenne auch die befehle wie:[/font]


    Code
    sudo ifconfig eth0 inet 192.168.0.1
    sudo ifconfig eth0 netmask 255.255.255.0
    sudo route add default gw 192.168.0.2


    [font="Arial"]jedoch nach dem neustarten der Netzwerkkonfig (reboot oder /etc/init.d/networking restart) nimmt der RPi immer das was in der /etc/network/interfaces drin steht.[/font]


    Ich habe auch noch ein Probelm mit meiner Klickbox DHCP - mir fehlt das Kommando damit ich den RPi fragen kann seine IP-Konfig via DHCP oder statisch eingetragen wurde.



    [font="Arial"]Ich steh jetzt etwas an und brauche eure unterstützung. Viell. hat ja jemand dies schon realisiert?[/font]



    [font="Arial"]DANKE für eure mithilfe![/font]

  • ich würde die Interface mit file_put_contents im webverzeichnis erstellen. Danach ein symbolic Link auf die Config im Webverzeichnis. Nach file_put_contents musst du noch Netzwerk-Dienst über PHP neustarten mit:


    Code
    system('/etc/init.d/network restart');
  • Es bleibt nicht viel anderes uebrig als /etc/network/interfaces zu aendern.


    Ich hab dafuer ein CGI in C geschrieben, das funktioniert problemlos :thumbs1:
    (NICHT fuer den PI sondern fuer ein Embedded-Linux)


    Wer C nicht kennt, laesst aber besser die Finger davon ! Also muesste
    man hier was anderes probieren.


    Wie waer's mit einem Shell-Script das mit sed /etc/network/interfaces
    modifiziert ?


    Das Script (oder zumindest sed) muesste mit root-Rechten laufen,
    also mit sudo gestartet werden oder das setuid-Bit gesetzt haben und
    root gehoeren.

  • Okay DANKE! paranoid64 ist mir gerade mit seinem Post zuvor gekommen....


    Ich bin jetzt nicht der PHP Spezialist und kenn den befehl file_put_contents nicht bin beim googlen auch nicht nicht weitergekommen....
    Ich wollte mir ein Shell script basteln das mit dem befehl sed in der datei /etc/network/interfaces die aktuelle IP,Netmask,Gateway ersetzt. zum aktivieren der DHCP funktion dann einfach statt static > dhcp.
    Jedoch finde ich deine lösung etwas besser - erspart mir ein shell script nur steh ich noch ein wenig auf dem schlauch.
    zB
    Ich muss mit file_put_contents die zeile in meiner etc/network/interfaces "address 192.168.0.111" durch "address 192.168.0.90" ersetzen aber wie?


    oder soll ich doch mit shell und sed arbeiten?

  • Der www-data Benutzer hat kein Recht Systemrelevante Dateien zu ändern. Netzwerk neu starten darf er natürlich ebenfalls nicht einfach so..


    Mach das doch einfach so das du die Datei in eine Textarena einließt und das was du dann änderst schreibst du einfach in eine temporäre Datei und anschließend überschreibst du die originale?



    ip.php:


    Letzteres ist aber extrem unsicher - du solltest auf keinen Fall den Webserver übers Internet zugänglich machen sonst könnte jemand fremdes diese Sicherheitslücke über Sudo ausnutzen. Alternativ oben rechts die Forumsuche nach sudowebscript bemühen und die Befehle dann anders benennen, dann hätte ein möglicher Angreifer keine Chance die heraus zu finden..


  • ...oder soll ich doch mit shell und sed arbeiten?


    Nein, ist nicht notwendig. Nimm einfach here docs von bash (Siehe folgendes Beispiel)


    Sehr schoen geht es auch mit envsubst. .


    Ist schon interessant wie umstaendlich man das auch machen kann.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

    Edited once, last by framp ().

  • Hier ein Beispiel:



  • DANKE! an alle für die Unterstützung.
    Ich habe nur noch ein Probelm mit meiner PHP Klickbox "IP-Adresse Automatisch (DHCP)". Ich möchte ja, sobald die Seite aufgerufen wird, dass in meiner Klickbox ein häkchen ist wenn mein RPi die IP von einem DHPC Server bekommen hat und umgekehrt falls ich bereits die IP statisch vergeben habe kein häkchen ist.
    Mir fehlt da leider der Befehl damit ich weiß ob mein RPi die IP nun via. DHCP oder statisch eingetragen wurde.....


    DANKE!!




    EDIT:
    hab ich mittlerweile auch hinbekommen mit


    Code
    grep dhcp /etc/network/interfaces | tr -s ' ' | cut -d ' ' -f4


    ich denke, dass müsste auch immer funktionieren

    Edited once, last by Sevi ().

  • @[font="Tahoma, Verdana, Arial, sans-serif"]framp[/font][font="Tahoma, Verdana, Arial, sans-serif"] [/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]hätte da noch eine Frage. in deinem script benützt du cut << EOF > nun möchte ich ja nach dem ersetzten des textes in /etc/network/interfaces den Befehl [/font][font="Tahoma, Verdana, Arial, sans-serif"]/etc/init.d/networking restart[/font][font="Tahoma, Verdana, Arial, sans-serif"] einfügen nur leider kommt dann immer die Meldung:[/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]/var/www/set_network.sh: Zeile 42: Warnung: here-document at line 24 delimited by end-of-file (wanted EOF)
    [/font]


    [font="Tahoma, Verdana, Arial, sans-serif"]ich habe auch schon EOT und 'EOT' probiert..... hab das noch nicht ganz verstanden wie das funktioniert.... google ist leider auch nicht ganz eindeutig ...hmm [/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]mit sed funktioniert´s schon mal jedoch finde ich deinen Befehl besser weil es dann ja mit sicherheit immer funktionieren muss.[/font]






    EDIT:
    Kommando retour!! hab falsch gegooglet "here tag" hätte ich gogglen sollen -> issue solved :D

    Edited once, last by Sevi ().


  • ...EDIT:
    Kommando retour!! hab falsch gegooglet "here tag" hätte ich gogglen sollen -> issue solved :D


    Fein dass es jetzt funktioniert. :thumbs1: Könntest Du auch noch kurz der Nachwelt berichten was der Grund für diesen Fehler war/ist ? :shy:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • für die Nachwelt. Meine Scripte sehen jetzt so aus:


    set_network.sh



    show_network.sh



    in google einfach "shell here tag" eingeben



    DANKE! an alle für die unterstützung -> tread wird geschlossen



    :danke_ATDE:


  • für die Nachwelt.


    Hallo, könntest du noch die zugehörigen HTML/PHP Filed mit posten? Hab ein ähnliches Projekt und würde mir deine Lösung gern mal komplett anschauen.


    Grüße
    Nelson