Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

JoeALLb

Zitat von: Tueftler1983 am 29 November 2016, 09:00:50
Super mit

(?s).*?Luft.*?([-?\d]+)


Klappt es, mal gucken was später angezeigt wird wenn es wieder + Grade sind
Steht dann "+" davor?
Nur zum Verständnis: Warum nimmst du das "(?s)" vorne mit dazu?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Tueftler1983

Eigentlich sollte bei + Graden nur der Zahlenwert angezeigt werden.

Das (?S) Weiß ich garnicht mehr warum es funktioniert auch ohne. Wurde mir vor 2 Jahren so gesagt als ich das Httpmod modul eingestellt habe.

Hatte die PoolSteuerung nur früher immer im September in den Keller gebracht. Weshalb mir das mit den Negativen Temperaturen nie aufgefallen war.

Vize

Zitat von: JoeALLb
@Vize:
Der klappt mit deinen Testdaten.
>Temperatur<.*?\:\s*(-?[\d,]+)

Hi JoeAllb,

klappt wunderbar, vielen Dank!!!

Gruß
Andreas

JoeALLb

@Vize: Prüfe bitte noch, ob du den "," im reading behalten willst, oder ihn ggf. durch einen . ersetzen möchtest..

Bei Logs und Plots machen , manchmal Probleme...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Vize

Wird das Komma denn auch mitgenommen, wenn ich das aus der Regex rausnehme?

Im Moment wandele ich mir das aber schon in einen "." um:
reading05OExpr     $val =~ s/,/\./; $val

Gruß
Andreas

JoeALLb

Nein, passt perfekt! Wollte nur erinnern, auch daran zu denken!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

lewej

#306
Hallo Leute,

ich würde gerne aus einer Webseite, meinen Software Stand abfragen, jetzt muss man sich dort mit email und Passwort zuerst einlogen. Außerdem benutzen die ein CSRFToken.
Das was ich auslesen will, steht im Quellcode so:

<li data-icon="false">
                    Softwarestand von: Thu Apr 24 12:28:29 2016 +0100
                </li>


Ich habe folgendes konfiguriert:

define testupdate HTTPMOD http://testminiserver/config/ 60
attr testupdate enableCookies 1
#attr testupdate extractAllJSON 1
attr testupdate reAuthRegex {"success":false}
attr testupdate sid1Data   {"email":"test@test.de","password":"123"}
attr testupdate sid1Header1 Content-Type: text/html
attr testupdate sid1Header2 Accept: */*
attr testupdate sid1URL http://testminiserver/accounts/m_login/
attr testupdate group UPDATE
attr testupdate room test


Dann benutzen die noch ein login formular:
<form action="/accounts/m_login/" data-ajax="false" method="POST" id="loginform"><input type='hidden' name='csrfmiddlewaretoken' value='BHfJDuKxFUiPC63qeb8Sgm7HRLza2Hn1' />
            <label>Email<input type="text" id="mail" name="mail"/></label>
            <label>Passwort<input type="password" id="pw" name="pw"/></label>

            <input type="submit" value="Login" />
            <p/>
            <span>
                <a href='/accounts/resetpw/'>Passwort vergessen?</a>
            </span>
        </form>


Das token wird gesetzt, aber sonst sehe ich nichts, hat jemand eine Idee?
Gruß

lewej

Zitat von: lewej am 06 Dezember 2016, 20:26:44
Hallo Leute,

ich würde gerne aus einer Webseite, meinen Software Stand abfragen, jetzt muss man sich dort mit email und Passwort zuerst einlogen. Außerdem benutzen die ein CSRFToken.
Das was ich auslesen will, steht im Quellcode so:

<li data-icon="false">
                    Softwarestand von: Thu Apr 24 12:28:29 2016 +0100
                </li>


Ich habe folgendes konfiguriert:

define testupdate HTTPMOD http://testminiserver/config/ 60
attr testupdate enableCookies 1
#attr testupdate extractAllJSON 1
attr testupdate reAuthRegex {"success":false}
attr testupdate sid1Data   {"email":"test@test.de","password":"123"}
attr testupdate sid1Header1 Content-Type: text/html
attr testupdate sid1Header2 Accept: */*
attr testupdate sid1URL http://testminiserver/accounts/m_login/
attr testupdate group UPDATE
attr testupdate room test


Dann benutzen die noch ein login formular:
<form action="/accounts/m_login/" data-ajax="false" method="POST" id="loginform"><input type='hidden' name='csrfmiddlewaretoken' value='BHfJDuKxFUiPC63qeb8Sgm7HRLza2Hn1' />
            <label>Email<input type="text" id="mail" name="mail"/></label>
            <label>Passwort<input type="password" id="pw" name="pw"/></label>

            <input type="submit" value="Login" />
            <p/>
            <span>
                <a href='/accounts/resetpw/'>Passwort vergessen?</a>
            </span>
        </form>


Das token wird gesetzt, aber sonst sehe ich nichts, hat jemand eine Idee?
Gruß

Hallo,
hat jemand eine Idee für mein Problem?

Gruss

StefanStrobel

Hallo lewej,

Du solltest als erstes analysieren, was Dein Browser tatsächlich der Reihe nach an den Server schickt. Dazu könntest Du z.B. Die BurpSuite verwenden.
Auf der Basis kannst Du dann die einzelnen Login-Schritte definieren.
Dein sid1Data ist sicher schon falsch und wird so vermutlich nicht funktionieren. Für das CSRF Token kannst Du dann Replacements verwenden.
Siehe https://wiki.fhem.de/wiki/HTTPMOD oder auch https://forum.fhem.de/index.php/topic,56455.msg479909.html#msg479909 als weiteres Beispiel für Replacements.

Gruß
   Stefan

zernima

Hallo zusammen,
ich versuche  für meine Busch-Jäger free@home über das Webinterface Sachen Lampen zuschalten. Als Ansatz hab ich mich mal mit HTTPMOD beschäftig.

Über Die Burpsuite konnte ich verschiedene Dinge Auslesen und wollte nun wissen ob ich das überhaupt nachbilden kann.

Diese wird mir zum  Beispiel nach dem Einloggen geliefert.

POST /http-bind HTTP/1.1
Host: 192.168.2.10:85
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: 192.168.2.10:85/
Content-Type: text/xml; charset=utf-8
Content-Length: 154
Cookie: installer@busch-jaeger.de/part=configuration
Connection: close

<body rid='488702' sid='eacc3503-8fa2-464d-bd76-1d6d66f46a7e' xmlns='http://jabber.org/protocol/httpbind' key='88d0ce90a833066691e79614e7195b84b0a7c629'/>


Ich hab gesehen das sich das alle 10 Sekunden die "rid" um eins erhöt wird und der Key sich auch ändert.

Im Moment bin ich noch nicht soweit das ich daten ändern kann. Ich wollte erst mal fragen ob es überhaupt Sinn macht an der Stelle weiter zu machen.
Wenn es möglich wäre die free@home Geräte so zu steuern wäre es einfach genial.

Vielen Dank mal  :)


StefanStrobel

Hallo,

Es ist denkbar, dass man das hinbekommt, aber es wird sicher komplex.
Scheint XMPP über HTTP zu sein. Da ich kein free@home habe, kann ich auch nicht viel helfen.
Poste doch mal einen kompletten Mitschnitt der Requests und Responses vom Einloggen bis zum Schalten eines Lichts. Dann kann ich die Komplexität besser einschätzen.

Gruß
   Stefan

zernima

Hallo,
vielen Dank mal für die Antwort.

Das hab gerade auch schon rausgefunden. Ich habe noch was BOSH gelesen.

Was brauchst du den Genau für Mitschnitte. Ist bisschen viel glaub  :P

Das Free@home ist echt ein tolles und für die meisten Bauherren einfach zu konfigurierendes System. Fhem als Ergänzung wäre der absolute Hammer.

das ist zum beispiel ein Post vom Lichtschalter

POST /http-bind HTTP/1.1
Host:  192.168.2.10:85
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http:// 192.168.2.10:85/
Content-Type: text/xml; charset=utf-8
Content-Length: 505
Cookie: installer@busch-jaeger.de/part=switching
Connection: close

<body rid='193184' sid='d54a3376-2b56-414d-a285-b5ed03c56de8' xmlns='http://jabber.org/protocol/httpbind' key='e1d4602759ed9c175345b31a60a48b566e5d28c0'><iq xmlns="jabber:client" to="mrha@busch-jaeger.de/rpc" type="set" id="1483994180764"><query xmlns="jabber:iq:rpc"><methodCall><methodName>RemoteInterface.setDatapoint</methodName><params><param><value><string>ABB700C9922C/ch0006/idp0000</string></value></param><param><value><string>1</string></value></param></params></methodCall></query></iq></body>


und das als Response:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 09 Jan 2017 20:36:21 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 1691
Connection: close
Access-Control-Max-Age: 7200
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Origin: *

<body sid='d54a3376-2b56-414d-a285-b5ed03c56de8' xmlns:stream='http://etherx.jabber.org/streams' xmlns='http://jabber.org/protocol/httpbind'><message xmlns='jabber:client' type='headline' to='installer@busch-jaeger.de/c3e9fe' from='mrha@busch-jaeger.de'><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='http://abb.com/protocol/update'><item id='1'><update xmlns='http://abb.com/protocol/update'><data>&lt;?xml version=&quot;1.0&quot;?&gt;&lt;project timeStamp=&quot;3060&quot; sessionId=&quot;638aa738&quot; type=&quot;update&quot; mrhaVersion=&quot;2.0.4&quot; mrhaBuild=&quot;3429&quot;&gt;&lt;devices&gt;&lt;device serialNumber=&quot;ABB700C9922C&quot; domainAddress=&quot;9376&quot; state=&quot;modified&quot; commissioningState=&quot;ready&quot;&gt;&lt;channels&gt;&lt;channel state=&quot;modified&quot; i=&quot;ch0003&quot; cid=&quot;ABB70084&quot;&gt;&lt;inputs&gt;&lt;dataPoint state=&quot;modified&quot; i=&quot;idp0000&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/dataPoint&gt;&lt;/inputs&gt;&lt;outputs/&gt;&lt;parameters/&gt;&lt;scenes/&gt;&lt;/channel&gt;&lt;channel state=&quot;modified&quot; i=&quot;ch0006&quot; cid=&quot;ABB70142&quot;&gt;&lt;inputs&gt;&lt;dataPoint state=&quot;modified&quot; i=&quot;idp0000&quot; full=&quot;false&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/dataPoint&gt;&lt;/inputs&gt;&lt;outputs&gt;&lt;dataPoint state=&quot;modified&quot; i=&quot;odp0000&quot; full=&quot;true&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/dataPoint&gt;&lt;/outputs&gt;&lt;parameters/&gt;&lt;scenes/&gt;&lt;/channel&gt;&lt;/channels&gt;&lt;parameters/&gt;&lt;/device&gt;&lt;/devices&gt;&lt;/project&gt;
</data></update></item></items></event></message></body>

StefanStrobel

Hallo zernima,

ich bin mir nicht sicher, ob das mit HTTPMOD eine gute Idee ist. Es kommt darauf an, ob man das Protokoll im Detail verstehen und nachbilden muss oder ob ein Druck auf den Lichtschalter oder das tatsächliche Anschalten eines Verbrauchers eigentlich immer gleich aussehen und nur eine sid und eine rid sich ändern.
Ideal wäre sicher ein eigenes Modul für Free@home.

Ich würde mich nochmal ab und wieder anmeldenden, den Druck auf den Lichschalter noch ein paar mal aufzeichnen und per diff prüfen, was sich tatsächlich ändert.
Wenn man nur aus den Responses die aktuelle sid extrahieren und beim nächsten mal mitschicken muss, dann kann man das mit HTTPMOD einfach machen.
Die nächste Frage ist dann, wo in der Kommunikation sich Schalter oder Aktoren wiederfinden und wie man das am elegantesten abbilden kann ohne für jeden einzelnen Schalter erst mal die Burp-Suite bemühen zu müssen ...

Gruss
   Stefan

zernima

Hallo Stefan,

das hab ich mir schin fast gedacht. Darum auch meine Frage. Ich denke auch das ich einen anderen Ansatz suchen muss.
Trotzdem vielen Dank. Und echt tolle Arbeit die du da machst :D

Amenophis86

Muss das free@home System immer Internet Zugang haben, soll heißen ist es Cloud gebunden, oder kann es auch autark agieren? Nach dem HTML Auswurf zu folge scheint es ja immer über die Buschjäger Homepage zu laufen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...