FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mechatronic am 15 Januar 2024, 19:59:09

Titel: HTTPMOD - Abfrage Datenverbrauch O2 Simkarten
Beitrag von: mechatronic am 15 Januar 2024, 19:59:09
Hallo,
nach vielen Jahren habe ich nach Umzug wieder mal einen FHEM Server aufgesetzt und mir kommen viele neue Ideen;)
Ich möchte gerne den aktuellen Datenverbrauch von O2 SIM-Karten abfragen.
Diese Info ist über die App und www.O2online.de abrufbar.

Meine Erkenntnisse bisher (Mit *CENSORED* habe ich sensible Daten abgeändert):
Im Browser nach LOGIN kann ich unter https://www.o2online.de/vt-usage-data/api/usage-data
im JSON-Format die gewünschten Infos sehen:
{"tariffDeviceWrapper":{"devices":[{"label":"IPhone 8","msisdn":"*CENSORED*","iccId":"*CENSORED*","subscriptionId":*CENSORED*,"showMsisdn":true,"status":"ACTIVE","simAction":null,"o2Free":false,"simcardTechnology":"PLASTIC","simReplacementInfo":null,"esimState":null,"asid":null,"usage":{"deviceType":"MULTI_CARD","nationalUsage":{"value":0,"unit":"MB"},"internationalUsage":{"value":0,"unit":"MB"}}},

Mit Burp habe ich folgenden GET ermittelt:
GET /vt-usage-data/api/usage-data HTTP/1.1
Host: www.o2online.de
Cookie: cust=*CENSORED*; touchPoints=PPP|20240115153402; lorip-o2=!t+UGXw22CVHlMDDv82XreAGJpoS9Yy02D10zr3kebbxHniDa1ibEI4HP8IIehbTDiMI3XncTcxGEFSc=; tefMarker=ZWEzZGMyMDMtZWE4Yy1hODY1LTZkZmYtZTg0ZWRkMGJhMWZj; o2online=P=22137+60729+1289+54037+7689+28390+21084+58546+11000+7473+6691+19993+31945+35441+20456+36299+48072+47138+11154+20291+51499+4005+34122+61995+15382+3816+63906+28461+42908+24437+31578+28551&L=63600+59029+23442+47561+8759+63087+39481+18766&A=40665+46324+56983+51845&S=21952+47827+28434+17306+17527+31623+26424+61438+21+19199+4880+28629+43505+13770+26470+64555&T=40587+18212+64873+17016+29171+27631+7401+40561+10002+15945+62947+48147&X=45248+18440+5576+52506&U=15221+24040+23925+35998+44939+19407+37761+63199&D=11135+37401+48229+35441+30692+18013+23766+33153+13568+6685+21540+39004&C=17594+58633+33886+53630+40665+46324+56983+51845&K=23057+26238+28446+2595&N=7067+207+24665+27950&M=40665+46324+56983+51845&F=22477+1436+31299+40648+40665+46324+56983+51845&G=14461+11314+7877+43724+40312+62659+35545+51521&Z=MCwCFHImyP02jFwyHxlK3MUk3kirvN00AhRmvoDUTygazZYEyEp8kNXICkBNhA==; CM_SESSIONID=D377C2CC9B63AFC58AC760E2B7D15E34; tefJwt=eyJ0eXAiOiJKV1QiLCJraWQiOiJqLzdzb3JlWUtnamxKQzJrdE1BRnNQWmppSEk9IiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2xvZ2luLm8yb25saW5lLmRlL3Nzby9vYXV0aDIiLCJhdWQiOiJwb3J0YWxfY2FyZV9vMiIsInBlcm1pc3Npb25zIjoiMTExMTAwMDEwMDExMTEwMTEwMDAwMDAxMTExMTExMDEwMTAwMDExMDAwMDExMTAwMTAxMDAwMDAwMDAwMCJ9.C-JiP7NhHr_kmC2K5ByyJjOrbe_iXb4QwTFDx4-ujvy7PC_jEzyDZdnrehT1rAxGB1ksPbLvvas9ApZV1rer-Lc7f7yt5-NkaEdEukDGBL7LzuyTWOrcv5hknz-84ji5CiASHIQ2Ocz0WUKaYIC2uniUWNA-6HDVldIjD0fjnoVjbSzAIqtwtiSjBRGeqI9eUSj7wZXYOccOeCmCcHVeLFIj354kqhmdJj3r3jro6EcLqvei8fLdrsSLzgd37gB1MXcpppIWVN-OLSpkQRA2nTUkKpI0iaR1OCqzQH4mAujrpDECwXJqa0PsugJSDYHjKR_1fDXCn7p2TWZCuxeLCbbBi0j_Xb6alhb8PcQlxRGRpHdxD1R_659dgkOREO4F1XZDOGrAWFvsbRxrI96eRYcUpnfYiyHk8JFZKYLyax0ZxdgA_XhePZN_DywOqno6vOOSGb-MSjRs9Oaku7cjDRPMLAb5JVXfYsmTP9zQdYr5sU4OcxhMZjy-yg8IN97bcbw57KHfuy4TMJFBXFZocx7SDyH9tP1esLUW_0jCsobreKOuFWAv53ZvasXJksgCJtPOMa7q9RjzbsE_4gf1Hl2TiosZspvS-zhyXr8PKgXqnUP3WHw10DDitmp06qlT_pjDXk_ilPVK11s3MljzGwMlrDL07-cXtvFjq_XHSbI; selfcaresid=553536a7-a6e0-445e-a7cd-13c43796a501; AWSALB=q87rI9LJqMhUotiE5kJ54GN6+FZZf/RJA/zJig3vjEOjHOaLsurOA5rbq7KcN7JA8qSDcYg0Ume+m1vZwVbnOC1YB3I4AVysXCdWIcBmuY5nUzp1qD0NBwojgYcn; AWSALBCORS=q87rI9LJqMhUotiE5kJ54GN6+FZZf/RJA/zJig3vjEOjHOaLsurOA5rbq7KcN7JA8qSDcYg0Ume+m1vZwVbnOC1YB3I4AVysXCdWIcBmuY5nUzp1qD0NBwojgYcn
Sec-Ch-Ua: "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
Accept: application/json, text/plain, */*
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
Ecareng-Selected-Subscription: *CENSORED*
Sec-Ch-Ua-Platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://www.o2online.de/ecareng/uebersicht
Accept-Encoding: gzip, deflate, br
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close

HTTPMOD ist wie folgt konfiguriert:
define Mobilfunk_Christian HTTPMOD https://www.o2online.de/ecareng/uebersicht 6000
attr Mobilfunk_Christian bodyDecode auto
attr Mobilfunk_Christian enableCookies 1
attr Mobilfunk_Christian extractAllJSON 1
attr Mobilfunk_Christian get01Data {"get" :["usage"]}
attr Mobilfunk_Christian get01Name Usage
attr Mobilfunk_Christian get01URL http://www.o2online.de/vt-usage-data/api/usage-data
attr Mobilfunk_Christian getHeader1 Content-Type: application/json
attr Mobilfunk_Christian getHeader2 Accept: application/json, text/plain, */*
attr Mobilfunk_Christian getHeader3 Ecareng-Selected-Subscription: *CENSORED*
attr Mobilfunk_Christian getHeader4 Referer: https://www.o2online.de/ecareng/uebersicht?subscriptionId=*CENSORED*
attr Mobilfunk_Christian getHeader5 Cookie: JSESSIONID=$sid
attr Mobilfunk_Christian handleRedirects 1
attr Mobilfunk_Christian reAuthRegex id="login"|Unauthorized
attr Mobilfunk_Christian room Mobilfunk
attr Mobilfunk_Christian showBody 0
attr Mobilfunk_Christian showError 1
attr Mobilfunk_Christian sid01Data email=*CENSORED*&password=*CENSORED*
attr Mobilfunk_Christian sid01URL https://login.o2online.de/sso/UI/Login
attr Mobilfunk_Christian verbose 5
#   BUSY       0
#   DEF        https://www.o2online.de/ecareng/uebersicht 6000
#   FUUID      65a2783e-f33f-c82d-5e30-cc34bab8a29c04ab
#   Interval   6000
#   MainURL    https://www.o2online.de/ecareng/uebersicht
#   ModuleVersion 4.1.16 - 4.4.2023
#   NAME       Mobilfunk_Christian
#   NOTIFYDEV  global
#   NR         393
#   NTFY_ORDER 50-Mobilfunk_Christian
#   STATE      ???
#   TYPE       HTTPMOD
#   value     
#   CompiledRegexes:
#   HTTPCookieHash:
#     CM_SESSIONID;:
#       Name       CM_SESSIONID
#       Options    Path=/
#       Path       
#       Value      524*CENSORED*
#     cust;:
#       Name       cust
#       Options    Domain=.o2online.de; Expires=Wed, 14-Jan-2026 16:44:14 GMT; Path=/
#       Path       
#       Value      CUST*CENSORED*
#     touchPoints;:
#       Name       touchPoints
#       Options    Domain=.o2online.de; Expires=Tue, 14-Jan-2025 18:24:13 GMT; Path=/
#       Path       
#       Value      PP|202*CENSORED*
#   HttpUtils:
#     NAME       
#     addr       https://www.o2online.de:443
#     auth       0
#     buf       
#     code       200
#     compress   1
#     conn       
#     data       
#     displayurl https://www.o2online.de/mein-o2/ecare/
#     header     Cookie: CM_SESSIONID=00D*CENSORED*; cust=CUST*CENSORED*; touchPoints=PP|202*CENSORED*
#     host       www.o2online.de
#     httpheader HTTP/1.1 200 OK
#date: Mon, 15 Jan 2024 18:24:13 GMT
#server: Apache
#vary: Origin,Accept-Encoding,Access-Control-Request-Method,Access-Control-Request-Headers
#access-control-allow-origin: *
#cache-control: max-age=60
#x-content-type-options: nosniff
#x-xss-protection: 1; mode=block
#content-type: text/html;charset=UTF-8
#content-language: de-DE
#set-cookie: CM_SESSIONID=524*CENSORED*; Path=/
#content-encoding: gzip
#content-security-policy: object-src 'none';script-src 'self' 'unsafe-inline' 'unsafe-eval' *.tiktok.com *.o2.com *.o2.de *.spatialbuzz.com *.usercentrics.eu *.baqend.com *.o2online.de *.telefonica.de *.o9.de *.googletagmanager.com *.trbo.com *.google-analytics.com *.kampyle.com *.adoberesources.net *.matelso.de *.contentsquare.net *.nowinteract.com *.demoup.com *.auracognitive.com *.adtelligence.de *.aklamio.com *.promisejs.org *.usabilla.com *.jsdelivr.net *.cloudflare.com *.abtasty.com *.blob.core.windows.net *.blau.o9.de *.blau.de *.ad4m.at track.adform.net www.facebook.com *.doubleclick.net adservice.google.com a.twiago.com www.youtube.com o2-music-cms-a.preprod.ava-digi.de www.google.co.in analytics.google.com dpm.demdex.net www.google-analytics.com imagesrv.adition.com www.google.com dsum-sec.casalemedia.com rtb-csync.smartadserver.com ih.adscale.de trc.taboola.com ad11.adfarm1.adition.com ad4m.at, frame-ancestors 'self' https://deploy.mca.tid.es https://deploy.tid.es *.o2.de *.o2.com *.o2online.de *.telefonica.com;
#content-length: 14544
#x-varnish: 40453636
#age: 0
#x-cache: MISS
#via: 1.1 varnish-live-1-0
#connection: close
#     httpversion 1.0
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    443
#     hu_portSfx
#     ignoreredirects 1
#     loglevel   4
#     path       /mein-o2/ecare/
#     protocol   https
#     redirects  0
#     timeout    2
#     url        https://www.o2online.de/mein-o2/ecare/
#     sslargs:
#   QUEUE:
#   READINGS:
#     2024-01-14 15:59:46   LAST_ERROR      gethostbyname login.www.o2online.de failed
#   REQUEST:
#     context    reading
#     data       
#     header     
#     ignoreredirects 0
#     num        unknown
#     priority   1
#     retryCount 0
#     type       update
#     url        https://www.o2online.de/mein-o2/ecare/
#
setstate Mobilfunk_Christian 2024-01-14 15:59:46 LAST_ERROR gethostbyname login.www.o2online.de failed


Leider funktioniert die Umsetzung noch nicht.
Ich erhalte in FHEM ,,Error occured on server". Dies ist auch der Fall, wenn ich ohne Anmeldung https://www.o2online.de/vt-usage-data/api/usage-data im Browser eingebe.

Im Logfile erhalte ich:
2024.01.15 17:18:06 4: Mobilfunk_Christian: HandleSendQueue sends get01 with timeout 2 to https://www.o2online.de/vt-usage-data/api/usage-data,
data: {"get" :["usage"]},
header: Content-Type: application/json
Accept: application/json, text/plain, */*
Ecareng-Selected-Subscription: *CENSORED*
Referer: https://www.o2online.de/ecareng/uebersicht?subscriptionId=*CENSORED*
Cookie: JSESSIONID=$sid
Cookie: AMAuthCookie=AQIC*CENSORED*-dO8oTehWjjsBYvs7hA.*AAJTSQACMDQAAlNLABM4NjQxNDk5MDEzMjc4MTA4MzMxAAJTMQAA*; JSESSIONID=65557350631901A5011AEAA92392C5D7; Max-Age=0; amlbcookie=LOGOUT; cookieenabled=1; lorip-o2-p-=!pi0LlGpsR0/DrBvrPXEPLbUjFNbI9PzHKqYlbUqiVnA1n0if9GT3EYujUT84O8AfqTd+BzRdL5A+gisbsYRfc67s0G*CENSORED*
2024.01.15 17:18:06 5: Mobilfunk_Christian: ReadCallback called from __ANON__
2024.01.15 17:18:06 4: Mobilfunk_Christian: Read callback: request type was get01 retry 1,
header: HTTP/1.1 401 Unauthorized
Date: Mon, 15 Jan 2024 16:18:06 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 23
Connection: close
Server: TEF-NG3
x-o2-logtraceid: 4350611944832178660
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
www-authenticate: FormBased
x-o2-authredirectwithouttarget: https://www.o2online.de/vt-login/authenticate/?clientId=portal_care_o2&target-app=
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-frame-options: DENY
X-APACHE: NG3
X-APACHE2: O2, body length 23
2024.01.15 17:18:06 5: Mobilfunk_Christian: Read callback: body
Error occured on server


Ziel soll übrigens sein:
1.   Einen Überblick über die Verbräuche zu bekommen, wir nutzen in 2 Verträgen mehrere SIM und teilen den Internetzugang derzeit indem wir zwischen SIMs aus beiden Verträgen wechseln
2.   Den Internetzugang per FHEM umzuschalten auf eine andere SIM (LTE/5G-Router) wenn ein gewisses Volumen aufgebraucht ist
Titel: Aw: HTTPMOD - Abfrage Datenverbrauch O2 Simkarten
Beitrag von: mechatronic am 15 Januar 2024, 20:00:46
Vielleicht kann mir jemand auf die Sprünge helfen.

Vielen Dank im Voraus!

Christian
Titel: Aw: HTTPMOD - Abfrage Datenverbrauch O2 Simkarten
Beitrag von: mechatronic am 15 Januar 2024, 20:04:08
Ich habe die Cookies im Verdacht. Der Cookie, gesendet von HTTPMOD ist anders aufgebaut wie der mitgelesene in Burp.
Ich habe beide mal gegenübergestellt und Umbrüche eingefügt:
FHEM:
Cookie:
AMAuthCookie=AQIC5wM2LY4SfczReIZCygXy5UVs-dO8oTehWjjsBYvs7hA.*AAJTSQACMDQAAlNLABM4NjQxNDk5MDEzMjc4MTA4MzMxAAJTMQAA*;
JSESSIONID=65557350631901A5011AEAA92392C5D7;
Max-Age=0;
amlbcookie=LOGOUT;
cookieenabled=1;
lorip-o2-p-=!VVvPnNz7Zxj2RnnrPXEPLbUjFNbI9K1iXS0468TJU0c6Z+Ljm8R1B1deiSu+6Aa8qyVyFkDhjngCdRAkYM3kBQkpvJkwhEIHg+Lpkw2X

Burp:
Cookie:
cust=CUST*CENSORED*;
touchPoints=PPP|20240115153402;
lorip-o2=!t+UGXw22CVHlMDDv82XreAGJpoS9Yy02D10zr3kebbxHniDa1ibEI4HP8IIehbTDiMI3XncTcxGEFSc=;
tefMarker=ZWEzZGMyMDMtZWE4Yy1hODY1LTZkZmYtZTg0ZWRkMGJhMWZj;
o2online=P=22137+60729+1289+54037+7689+28390+21084+58546+11000+7473+6691+19993+31945+35441+20456+36299+48072+47138+11154+20291+51499+4005+34122+61995+15382+3816+63906+28461+42908+24437+31578+28551&L=63600+59029+23442+47561+8759+63087+39481+18766&A=40665+46324+56983+51845&S=21952+47827+28434+17306+17527+31623+26424+61438+21+19199+4880+28629+43505+13770+26470+64555&T=40587+18212+64873+17016+29171+27631+7401+40561+10002+15945+62947+48147&X=45248+18440+5576+52506&U=15221+24040+23925+35998+44939+19407+37761+63199&D=11135+37401+48229+35441+30692+18013+23766+33153+13568+6685+21540+39004&C=17594+58633+33886+53630+40665+46324+56983+51845&K=23057+26238+28446+2595&N=7067+207+24665+27950&M=40665+46324+56983+51845&F=22477+1436+31299+40648+40665+46324+56983+51845&G=14461+11314+7877+43724+40312+62659+35545+51521&Z=MCwCFHImyP02jFwyHxlK3MUk3kirvN00AhRmvoDUTygazZYEyEp8kNXICkBNhA==;
CM_SESSIONID=D377C2CC9B63AFC58AC760E2B7D15E34;
tefJwt=eyJ0eXAiOiJKV1QiLCJraWQiOiJqLzdzb3JlWUtnamxKQzJrdE1BRnNQWmppSEk9IiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2xvZ2luLm8yb25saW5lLmRlL3Nzby9vYXV0aDIiLCJhdWQiOiJwb3J0YWxfY2FyZV9vMiIsInBlcm1pc3Npb25zIjoiMTExMTAwMDEwMDExMTEwMTEwMDAwMDAxMTExMTExMDEwMTAwMDExMDAwMDExMTAwMTAxMDAwMDAwMDAwMCJ9.C-JiP7NhHr_kmC2K5ByyJjOrbe_iXb4QwTFDx4-ujvy7PC_jEzyDZdnrehT1rAxGB1ksPbLvvas9ApZV1rer-Lc7f7yt5-NkaEdEukDGBL7LzuyTWOrcv5hknz-84ji5CiASHIQ2Ocz0WUKaYIC2uniUWNA-6HDVldIjD0fjnoVjbSzAIqtwtiSjBRGeqI9eUSj7wZXYOccOeCmCcHVeLFIj354kqhmdJj3r3jro6EcLqvei8fLdrsSLzgd37gB1MXcpppIWVN-OLSpkQRA2nTUkKpI0iaR1OCqzQH4mAujrpDECwXJqa0PsugJSDYHjKR_1fDXCn7p2TWZCuxeLCbbBi0j_Xb6alhb8PcQlxRGRpHdxD1R_659dgkOREO4F1XZDOGrAWFvsbRxrI96eRYcUpnfYiyHk8JFZKYLyax0ZxdgA_XhePZN_DywOqno6vOOSGb-MSjRs9Oaku7cjDRPMLAb5JVXfYsmTP9zQdYr5sU4OcxhMZjy-yg8IN97bcbw57KHfuy4TMJFBXFZocx7SDyH9tP1esLUW_0jCsobreKOuFWAv53ZvasXJksgCJtPOMa7q9RjzbsE_4gf1Hl2TiosZspvS-zhyXr8PKgXqnUP3WHw10DDitmp06qlT_pjDXk_ilPVK11s3MljzGwMlrDL07-cXtvFjq_XHSbI; selfcaresid=553536a7-a6e0-445e-a7cd-13c43796a501; AWSALB=bAh7FEbKdziAxzubmwFE3xPtKfxh9rFwG6N0KFDROqc0nG9G8+6/QAtOCke6oqMPWa+jYTHX0wCwfNs3Knb3S7GFAnQLUschZqXnmGus5E7NTqKVMDc6ZO2QcCL0;
AWSALBCORS=bAh7FEbKdziAxzubmwFE3xPtKfxh9rFwG6N0KFDROqc0nG9G8+6/QAtOCke6oqMPWa+jYTHX0wCwfNs3Knb3S7GFAnQLUschZqXnmGus5E7NTqKVMDc6ZO2QcCL0