WLAN Anmeldung per Script

Themen, die in keine andere Kategorie passen

Moderator: Co-Administratoren

Duescher
Beiträge: 28
Registriert: 06.06.2009, 16:29
Hat sich bedankt: 7 Mal

Re: WLAN Anmeldung per Script

Beitrag von Duescher » 16.01.2024, 16:00

Hallo,
McPan hat geschrieben:
10.01.2024, 16:41

Interessant wäre auch die Ausgabe von "http://192.168.16.1/md5.js", wo vermutlich die Funktion "hexMD5()" mit drinsteckt, um zu schauen, ob die tatsächlich "nur" einen MD5-Hash bildet, oder ob sich hinter "hex" im Namen noch weitere Anpassungen verbergen. In diesem Fall funktionert's mit der automatischen Anmeldung logischerweise auch nicht.
Das habe ich gemacht. Die Rueckgabe ist dann:

Code: Alles auswählen

/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Code also contributed by Greg Holt
 * See http://pajhome.org.uk/site/legal.html for details.
 */

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF)
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
  return (msw << 16) | (lsw & 0xFFFF)
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt))
}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function cmn(q, a, b, x, s, t)
{
  return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t)
{
  return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t)
{
  return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t)
{
  return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t)
{
  return cmn(c ^ (b | (~d)), a, b, x, s, t)
}

/*
 * Calculate the MD5 of an array of little-endian words, producing an array
 * of little-endian words.
 */
function coreMD5(x)
{
  var a =  1732584193
  var b = -271733879
  var c = -1732584194
  var d =  271733878

  for(i = 0; i < x.length; i += 16)
  {
    var olda = a
    var oldb = b
    var oldc = c
    var oldd = d

    a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
    d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
    c = ff(c, d, a, b, x[i+ 2], 17,  606105819)
    b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
    a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
    d = ff(d, a, b, c, x[i+ 5], 12,  1200080426)
    c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
    b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
    a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416)
    d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
    c = ff(c, d, a, b, x[i+10], 17, -42063)
    b = ff(b, c, d, a, x[i+11], 22, -1990404162)
    a = ff(a, b, c, d, x[i+12], 7 ,  1804603682)
    d = ff(d, a, b, c, x[i+13], 12, -40341101)
    c = ff(c, d, a, b, x[i+14], 17, -1502002290)
    b = ff(b, c, d, a, x[i+15], 22,  1236535329)

    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
    c = gg(c, d, a, b, x[i+11], 14,  643717713)
    b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
    d = gg(d, a, b, c, x[i+10], 9 ,  38016083)
    c = gg(c, d, a, b, x[i+15], 14, -660478335)
    b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438)
    d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
    c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501)
    a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473)
    b = gg(b, c, d, a, x[i+12], 20, -1926607734)

    a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
    c = hh(c, d, a, b, x[i+11], 16,  1839030562)
    b = hh(b, c, d, a, x[i+14], 23, -35309556)
    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353)
    c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
    b = hh(b, c, d, a, x[i+10], 23, -1094730640)
    a = hh(a, b, c, d, x[i+13], 4 ,  681279174)
    d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
    c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
    b = hh(b, c, d, a, x[i+ 6], 23,  76029189)
    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
    d = hh(d, a, b, c, x[i+12], 11, -421815835)
    c = hh(c, d, a, b, x[i+15], 16,  530742520)
    b = hh(b, c, d, a, x[i+ 2], 23, -995338651)

    a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
    d = ii(d, a, b, c, x[i+ 7], 10,  1126891415)
    c = ii(c, d, a, b, x[i+14], 15, -1416354905)
    b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
    a = ii(a, b, c, d, x[i+12], 6 ,  1700485571)
    d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
    c = ii(c, d, a, b, x[i+10], 15, -1051523)
    b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
    a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359)
    d = ii(d, a, b, c, x[i+15], 10, -30611744)
    c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
    b = ii(b, c, d, a, x[i+13], 21,  1309151649)
    a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
    d = ii(d, a, b, c, x[i+11], 10, -1120210379)
    c = ii(c, d, a, b, x[i+ 2], 15,  718787259)
    b = ii(b, c, d, a, x[i+ 9], 21, -343485551)

    a = safe_add(a, olda)
    b = safe_add(b, oldb)
    c = safe_add(c, oldc)
    d = safe_add(d, oldd)
  }
  return [a, b, c, d]
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = "0123456789abcdef"
  var str = ""
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
  }
  return str
}

/*
 * Convert an array of little-endian words to a base64 encoded string.
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  var str = ""
  for(var i = 0; i < binarray.length * 32; i += 6)
  {
    str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
                      ((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
  }
  return str
}

/*
 * Convert an 8-bit character string to a sequence of 16-word blocks, stored
 * as an array, and append appropriate padding for MD4/5 calculation.
 * If any of the characters are >255, the high byte is silently ignored.
 */
function str2binl(str)
{
  var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
  var blks = new Array(nblk * 16)
  for(var i = 0; i < nblk * 16; i++) blks[i] = 0
  for(var i = 0; i < str.length; i++)
    blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
  blks[i>>2] |= 0x80 << ((i%4) * 8)
  blks[nblk*16-2] = str.length * 8
  return blks
}

/*
 * Convert a wide-character string to a sequence of 16-word blocks, stored as
 * an array, and append appropriate padding for MD4/5 calculation.
 */
function strw2binl(str)
{
  var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
  var blks = new Array(nblk * 16)
  for(var i = 0; i < nblk * 16; i++) blks[i] = 0
  for(var i = 0; i < str.length; i++)
    blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
  blks[i>>1] |= 0x80 << ((i%2) * 16)
  blks[nblk*16-2] = str.length * 16
  return blks
}

/*
 * External interface
 */
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/* Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
Desweiteren habe ich die folgende Befehlszeile in allen moeglichen Varianten ausgefuehrt:

Code: Alles auswählen

system.Exec("PASSWORD=`printf '\217GEHEIM\354\244\150\162\177\153\276\023\152\303\054\066\134\131\166\110' | md5sum | awk '{print $1}'` && wget --method=POST --post-data 'username=XXXX&password='$PASSWORD'&dst=''&popup='false' --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 '' http://192.168.16.1/login/");
Ich habe alle Moeglichkeiten jeweils mit/ohne user-agent, method=POST, dst und popup(false/true) ausprobiert, wobei ich mir aber nicht ganz sicher bin, ob ich die Werte fuer dst und popup richtig eingegeben habe.

Der LogIn zum WLAN hat nicht stattgefunden.

Schade, aber der Versuch war es wert. Vielen Dank.
Carsten

McPan
Beiträge: 222
Registriert: 29.11.2021, 07:04
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 12 Mal
Danksagung erhalten: 44 Mal

Re: WLAN Anmeldung per Script

Beitrag von McPan » 18.01.2024, 18:45

Ok. Die gute Nachricht ist, dass ein kurzer Test mit der verwendeten Javascript-"hexMD5()"-Funktion zumindest bestätigt, dass diese tatsächlich nur einen MD5-Hash aus dem übergebenen String bildet. Der erzeugte Hash ist für gleichen Inhalt identisch mit dem Ergebnis der "md5sum"-Shell-Funktion.

Bei den übergebenen Post-Daten sind in deinem Versuch wohl ein paar ' ' an der falschen Stelle. Das klabüser ich aber bei Gelegenheit noch einmal auseinander.
Grüße,
Marco

Elektrische Bauteile funktionieren mit Rauch. Der Beweis: tritt der Rauch aus, funktioniert das Bauteil nicht mehr!
Raspberrymatic @ RPi3b+, HmIP mit RPi-RF-MOD

Dennis-HM
Beiträge: 256
Registriert: 19.02.2023, 18:40
System: CCU
Hat sich bedankt: 16 Mal
Danksagung erhalten: 23 Mal

Re: WLAN Anmeldung per Script

Beitrag von Dennis-HM » 19.01.2024, 08:32

Code: Alles auswählen

PASSWORD=`printf '\217GEHEIM\354\244\150\162\177\153\276\023\152\303\054\066\134\131\166\110' | md5sum | awk '{print $1}'` 
&& wget 
--method=POST 
--post-data 'username=XXXX&password='$PASSWORD'&dst=''&popup='false' 
--user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 '' http://192.168.16.1/login/
die "Password-Zeile" sieht gut aus und die geht auch so auf der Console

beim --post-data passt das nicht mit den ' Zeichen - ich bin mir auch nicht sicher, ob die ganzen ' im post-data notwendig sind, und dass nur die ersten und letzten ausreichen (zu wenig Erfahrung mit wget in der Shell ;- )

und im --user-agent auch nicht

Funktioniert denn der Aufruf von der Console?

PS Zum Debuggen würde ich erstmal alle Parameter vom wget in Shell-Variablen speichern und auf der Console probieren.

McPan
Beiträge: 222
Registriert: 29.11.2021, 07:04
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 12 Mal
Danksagung erhalten: 44 Mal

Re: WLAN Anmeldung per Script

Beitrag von McPan » 19.01.2024, 15:36

Ich denke, dass

Code: Alles auswählen

system.Exec("PASSWORD=`printf '\217GEHEIM\354\244\150\162\177\153\276\023\152\303\054\066\134\131\166\110' | md5sum | awk '{print $1}'` && wget --post-data 'username=XXXX&password='$PASSWORD'&dst=&popup=false' --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' http://192.168.16.1/login/");
passen sollte. Ggf. auch nochmal mit "popup=true" probieren. Das "--method=post" habe ich wieder weggelassen. Gibt mecker, da "--post-data=..." die http-Methode anscheinend schon impliziert.
Grüße,
Marco

Elektrische Bauteile funktionieren mit Rauch. Der Beweis: tritt der Rauch aus, funktioniert das Bauteil nicht mehr!
Raspberrymatic @ RPi3b+, HmIP mit RPi-RF-MOD

Duescher
Beiträge: 28
Registriert: 06.06.2009, 16:29
Hat sich bedankt: 7 Mal

Re: WLAN Anmeldung per Script

Beitrag von Duescher » 22.01.2024, 21:30

Danke nochmals fuer Eure Hilfe.
Im Moment ist der WIFI Internetzuganng abgeschaltet (oder kaputt) und ich kann das Ganze nicht weiter testen. Wann er wieder funktionieren wird weiss ich nicht.
Habe im Moment nur mein Mobiltelefon.
Ich berichte aber auf jeden Fall, wenn ich wieder Zugriff auf die LogInn Seite habe.

Carsten

Duescher
Beiträge: 28
Registriert: 06.06.2009, 16:29
Hat sich bedankt: 7 Mal

Re: WLAN Anmeldung per Script

Beitrag von Duescher » 03.02.2024, 21:49

Hallo Marco,
Deine Programmzeile fuktioniert fast perfekt :P :P :P
Lediglich der letzte "/" hinter dem http://192.168.16.1/login/ muss weggelassen werden. Dann funktioniert der LogIn. Der Code fuer den LogIn muss also lauten:

Code: Alles auswählen

system.Exec("PASSWORD=`printf '\217GEHEIM\354\244\150\162\177\153\276\023\152\303\054\066\134\131\166\110' | md5sum | awk '{print $1}'` && wget --post-data 'username=XXXXXX&password='$PASSWORD'&dst=&popup=true' --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' http://192.168.16.1/login");
Ich habe alle denkbaren Varianten auf der Konsole ausprobiert, wie Dennis empfohlen hatte. Nur so wie es oben steht funktioniert es.

Ich habe jetzt auf der Homematic ein Programm erstellt, dass per ping alle 5 Minuten prueft, ob 192.168.16.1 erreichbar ist. Wenn nicht wird der obige Programmcode per Script ausgefuehrt und die Internetverbindung wird wieder hergestellt. Zumindest dann, wenn der WiFi Server auch arbeitet.

Nochmals Danke Euch allen.
Carsten

Dennis-HM
Beiträge: 256
Registriert: 19.02.2023, 18:40
System: CCU
Hat sich bedankt: 16 Mal
Danksagung erhalten: 23 Mal

Re: WLAN Anmeldung per Script

Beitrag von Dennis-HM » 04.02.2024, 18:30

Schön, dass es jetzt funktioniert.

👍

Antworten

Zurück zu „OffTopic“