Page 1 sur 1
récuperer une valeur avec password
Publié : 10 janv. 2018, 23:04
par mickaelr30
bonjour,
je me connecte sur internet via une box 4G (huawei - E5180) et comme ils limitent le débit de la connexion après un certains volume de data, j'aimerai récupérer cette valeur.
le problème est que pour se connecter il faut rentrer un username et un password.
de ce que j'ai trouvé le codage du password est en base64.
quelqu'un saurait comment faire pour se connecter (en LUA ou en python je suis pas trop difficile

)
merci
Re: récuperer une valeur avec password
Publié : 12 janv. 2018, 13:45
par fab0030
Re: récuperer une valeur avec password
Publié : 22 janv. 2018, 23:08
par mickaelr30
bonsoir,
maintenant j'arrive à récupérer quelques valeurs avec le Github en php (fab0030 tu bois déja assez de café

) :
object(SimpleXMLElement)#8 (4) {
["CurrentMonthDownload"]=>
string(11) "24436159913"
["CurrentMonthUpload"]=>
string(9) "705955609"
["MonthDuration"]=>
string(6) "255737"
["MonthLastClearTime"]=>
string(9) "2018-1-20"
}
maintenant j'aimerai récupérer seulement la valeur "CurrentMonthDownload" en php pour la mettre dans un capteur virtuel
quelqu'un a une idée ?
merci
Re: récuperer une valeur avec password
Publié : 23 mars 2018, 15:23
par fab0030
Vu que Mickael traîne (

) je poste le script qui va bien pour récupérer une donnée sur une box huawei (4G box bouygues).
En l’occurrence les data consommés pour le mois en cours
Code : Tout sélectionner
#!/usr/bin/env python
import requests
import re
import hashlib
import base64
import xml.etree.ElementTree as ET
import urllib2
from StringIO import StringIO
def login(baseurl, username, password):
s = requests.Session()
r = s.get(baseurl + "html/index.html")
csrf_tokens = grep_csrf(r.text)
s.headers.update({
'__RequestVerificationToken': csrf_tokens[1],
})
data = login_data(username, password, csrf_tokens[1])
print("api/user/login")
r = s.post(baseurl + "api/user/login", data=data)
print(r.text)
s.headers.update({
'__RequestVerificationToken': r.headers["__RequestVerificationTokenone"]
})
return s
def change_mode(baseurl, session):
r = s.get(baseurl + "api/monitoring/month_statistics")
root = ET.fromstring(r.text)
data5 = root.find('CurrentMonthDownload')
print(data5.text)
data6 = str(round((int(data5.text) * 0.000000009699), 2))
print(data6)
requete='http://IP_DOMOTICZ:PORT_DOMOTICZ/json.htm?type=command¶m=udevice&idx=NUMERO_IDX&nvalue=0&svalue='+data6
r=requests.get(requete)
def grep_csrf(html):
pat = re.compile(r".*meta name=\"csrf_token\" content=\"(.*)\"", re.I)
matches = (pat.match(line) for line in html.splitlines())
return [m.group(1) for m in matches if m]
def login_data(username, password, csrf_token):
def encrypt(text):
m = hashlib.sha256()
m.update(text)
return base64.b64encode(m.hexdigest())
password_hash = encrypt(username + encrypt(password) + csrf_token)
return '<?xml version:"1.0" encoding="UTF-8"?><request><Username>admin</Username><Password>'+password_hash+'</Password><password_type>4</password_type></request>'
WEB = "http://IP_BOX/"
USERNAME = "USER_BOX"
PASSWORD = "PWD_BOX"
s = login(WEB, USERNAME, PASSWORD)
change_mode(WEB, s)
Mickaël l'a un peu simplifié...mais l'idée est là !!