Willkommen! Melden Sie sich an oder registrieren Sie sich.

Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.

Anmelden - oder - Benutzerkonto erstellen

[solved] Webinterface commands: sessionid in shell scripts

  • Wenn man mit wget in shell script Webinterface commands ausführen will, muss man die Anti-Hijack und/oder die Token-basierte Sicherheit in den Webinterface Einstellungen deaktivieren, damit es funktionert.

    Es muss ja auch möglich sein mit einem vollwertigem wget binary mit --post-data oder --post-file die sessionid etc. mitzugeben, damit man die Sicherheitseinstellungen nicht deaktivieren muss. Ich habe mir mal die connectors.py im Partnerbox plugin angesehen. Die sessionid bekomme ich über wget raus, die cookies kann ich auch speichern, wobei im cookie-file dann nicht allzuviel gespeichert wird. Aber was muss man bei einem Webinterface command über POST mitsenden, damit das funktioniert?


    user

    pass

    sessionid


    Ich bin aus dem code in der connectors.py nicht ganz schlau geworden, was in welchem format gesendet werden muss. Vielleicht könnte mir jemand auf die Sprünge helfen, wie ich den header mit übergebe bzw. wie ich den über wget rausfinde


    connectors.py

    Code
    1. headers = {
    2. "Authorization": authHeader,
    3. 'content-type':'application/x-www-form-urlencoded',
    4. }


    Wie sieht den POST im Rohformat aus, wenn das über Partnerbox gesendet wird?

  • Ich schau, dass ich dir spätestens morgen was schreiben kann. Bin heute noch unterwegs.

  • hi fred,


    ich mache es folgendermaßen:

    Code
    1. SESSIONID=`wget -q -O - "http://localhost/web/session" |grep -o -E "<e2sessionid>(.*)</e2sessionid>" |sed "s|.*<e2sessionid>\(.*\)</e2sessionid>.*|\\1|"`
    2. bzw.:
    3. SESSIONID=`curl -s -X POST "http://root:$PW@localhost/web/session" |grep -o -E "<e2sessionid>(.*)</e2sessionid>" |sed "s|.*<e2sessionid>\(.*\)</e2sessionid>.*|\\1|"`
    4. und:
    5. curl -X POST "http://root:$PW@localhost/web/message?text=hallo&type=1&timeout=5&sessionid=$SESSIONID"
  • danke, mit curl klappt das wie beschrieben.


    An curl hatte ich gar ehrlich gesagt gar nicht gedacht, weil es das bis DreamOS gar nicht auf den Boxen gab - oder ich hab's übersehen.


    Mit einem vollwertigem wget binary müsste es aber auch klappen - tut es aber (noch) nicht. Im Grunde gibs't du ja nur die sessionid mit, was im übrigen die Eingangsfrage beantwortet.


    Ich vermute, dass ich da noch einen Fehler in der Syntax mit wget habe.

  • jo, eigentlich braucht es dann nichtmal user und pass. sessionid alleine reicht evtl. weil die session der sessionid abfrage noch offen ist.


    ich habe das gleiche thema im dmm forum auch diskutiert und habe irgendwann mit wget aufgegeben.

    mit dem debian wget binary hatte ich es auch experimentiert.


    irgendwo hatte ich auch die HTTP/1.0 POST befehle dokumentiert, die mein gira homeserver für die neuen dmm sicherheitsfunktionen verwendet.

  • ja, das klappt auch ohne user pass


    Code
    1. root@dm900:~# SESSIONID=`curl -s -X POST "localhost/web/session" |grep -o -E "<e2sessionid>(.*)</e2sessionid>" |sed "s|.*<e2sessionid>\(.*\)</e2sessionid>.*|\\1|"`
    2. root@dm900:~# curl -X POST "http://localhost/web/message?text=hallo&type=1&timeout=5&sessionid=$SESSIONID"
    3. <?xml version="1.0" encoding="UTF-8"?>
    4. <e2simplexmlresult>
    5. <e2state>True</e2state>
    6. <e2statetext>Die Nachricht wurde erfolgreich gesendet!</e2statetext>
    7. </e2simplexmlresult>
    8. root@dm900:~#


    Mal sehen ob ich das auch mit wget hinbekomme, sonst müsste all meine scripte komplett auf curl umstellen, wobei - die Arbeit hätte ich mit wget auch.


    Und ob man nun curl oder wget nachinstalliert ist eigentlich auch egal, mit dem kastrierten busybox-wget out of the box klappt es sowieso nicht


    Danke noch mal für den Tipp mit curl

  • Das vollwertige wget binary kann auch https. Die Herausforderung liegt darin, dass es auch im OE2.0 mit aktivierten Sicherheitseinstellungen funktionieren soll. Ich kann mich einfach nicht von den treuen, alten und nicht tot zu bringenden OE2.0 Boxen trennen ... :D



    Aber ich habe es mit wget auch nicht hinbekommen, da scheiterte es schon beim holen der sessionid


    Aber für OE2.0 gibt es auch curl - ich hab' nie danach gesucht ...

    Code
    1. root@dm7020hd:~# SESSIONID=`curl -s -X POST "localhost/web/session" |grep -o -E "<e2sessionid>(.*)</e2sessionid>" |sed "s|.*<e2sessionid>\(.*\)</e2sessionid>.*|\\1|"`
    2. root@dm7020hd:~# curl -X POST "http://localhost/web/message?text=hallo&type=1&timeout=5&sessionid=$SESSIONID"
    3. <?xml version="1.0" encoding="UTF-8"?>
    4. <e2simplexmlresult>
    5. <e2state>True</e2state>
    6. <e2statetext>Message sent successfully!</e2statetext>
    7. </e2simplexmlresult>
    8. root@dm7020hd:~#


    damit hat sich das für mich mit wget auch erledigt