|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
E' possibile recuperare i dati VOIP interrogando l'ACS?
Ciao a tutti,
sto provando a recuperare i dati voip dall'ACS tramite tr069, ma arrivo solo fino a un certo punto. Premessa: ho già i dati voip recuperati dal modem, ma vorrei riuscire ad ottenerli in modo indipendente dal dispositivo per ogni evenienza. Ho provato sia con honeything che con easycwmp; in entrambi i casi sono riuscito a installare ed eseguire le prove indicate nella documentazione... e qua mi fermo. Mi sembra che easycwmp sia più completo, quindi mi sono concentrato più su questo strumento. Seguendo la guida, su un terminale lancio /usr/sbin/ubusd -s /var/run/ubus.sock e su un altro /usr/sbin/easycwmpd -f -b Dopo l'avvio iniziale riesco a inviare i comandi tramite ubus; più in dettaglio Codice:
$ sudo ubus list -v 'tr069' @5f3e1da2 "notify":{} "inform":{"event":"String"} "command":{"name":"String"} $ ![]() (tutte le prove fatte in macchina virtuale con Ubuntu 16.04.4) Suggerimenti? ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2013
Città: Prov. Palermo
Messaggi: 10210
|
Interessa anche a me, sarebbe utile anche capire come riuscire a tirare giù i firmware dei router del provider.
__________________
PC-Spec:CPU: AMD Ryzen 5 5600 @stock - Motherboard: Gigabyte B450 Aorus Pro - Ram: 2x8GB DDR4 3000 mhz Corsair Vangeance LPX CL15 - VGA: MSI RX 6600 8GB Mech 2X - SSD: Samsung 750 Evo 250GB + Samsung 870 Evo 1TB - HDD: Seagate Barracuda 1TB + Toshiba 2TB + Toshiba 3TB - Ali: Seasonic Focus GX-650 - Case: Enermax Ostrog - Monitor: AOC 24G4XE IPS 180Hz Full HD - Modem/Router: Fritz!Box 4060 - NAS: Synology DS224+ |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Dato che non ne vengo a capo ho deciso di fare un passo indietro.
Se invio "a mano" con python un messaggio all'ACS ottengo una risposta che mi sembra corretta, ad esempio: 1.py Codice:
import requests url="http://acswind.wind.it:7003/cwmpWeb/CPEMgt" headers = {'content-type': 'text/xml'} body = """<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cwmp="urn:dslforum-org:cwmp-1-0"> [...]/troppo altro testo da riportare qui """ response = requests.post(url,data=body,headers=headers) print response.content Codice:
$ python 1.py <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cwmp="urn:dslforum-org:cwmp-1-2"> <SOAP-ENV:Header> <cwmp:ID SOAP-ENV:mustUnderstand="1">1</cwmp:ID> </SOAP-ENV:Header> <SOAP-ENV:Body> <cwmp:InformResponse> <MaxEnvelopes>1</MaxEnvelopes></cwmp:InformResponse></SOAP-ENV:Body> </SOAP-ENV:Envelope> $ Sicuramente sbaglio qualcosa (immagino che il messaggio vuoto non sia "vuoto" come lo aspetta lui), ma cosa? ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Confermo che sbaglio qualcosa.
Usando un'estensione di Chrome per inviare delle richieste http, dopo l'invio del messaggio vuoto ottengo una risposta che sembra valida. È un metodo decisamente barbaro però ![]() Se riesco stanotte ci guardo ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Niente, ancora nulla
![]() Sbaglio ancora qualcosa; riesco a fare:
![]() ![]() ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
comunque io ho provato un pò con quello tiscali (ha dietro un server freeacs)... sembra rispondermi più o meno sempre correttamente ma mi fermo io perchè dopo l'auth inziale arrivano le richieste tipo GetRPCMethods o GetParameterValues a cui non so il router originale come avrebbe risposto (semplicemente perchè non gli ho sniffato il traffico)
infatti ho semplicemente provato a simularmi come un'altro modem con gli schemi trovati qui https://github.com/jerrypnz/clj.tr06...ster/resources o qui https://github.com/dpavlin/perl-cwmp...ster/t/methods e tenendo come base l'analisi fatta qui: http://djuro82.blogspot.it/2011/05/t...visioning.html e in secondo piano (troppo lunga ![]() https://cwmp-data-models.broadband-f...#TR-069%20RPCs ancora non mi è chiarissimo a cosa serva l'indirizzo di ConnectionRequestURL che si da nella prima request di Inform tu i body delle request da mandare dove li hai recuperati? infine cito anche questo progetto di github che sembra il più semplice tra quelli analizzati (che erano un pò più invasivi installandosi a livello di sistema operativo) e che potrebbe aiutarci nell'evitare di fare tutte le request "a manina": https://github.com/johnblackford/cwmpwalk qui mi son fermato nella fase iniziale perchè è per py3 e io avevo pronto il due e dopo una giornata di prove e letture mi ero rotto Ultima modifica di FrancYescO : 26-04-2018 alle 08:48. |
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
Ho preso il primo esempio (Inform) e l'ho adattato ai miei dati. I dati del DeviceId e del successivo ParameterList li ho recuperati dal file di configurazione del modem. La lista dei parametri definita in ParameterList l'ho ridotta da [12] a [8] tenendo solo: Codice:
<Name>InternetGatewayDevice.DeviceSummary</Name> <Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name> <Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name> <Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name> <Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name> <Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name> <Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name> <Name>InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name> Codice:
<Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Name</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.SIP.ProxyServer</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.SIP.RegistrarServer</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.SIP.UserAgentDomain</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.1.Enable</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.1.DirectoryNumber</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.1.SIP.AuthUserName</Name> <Name>InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.1.SIP.AuthPassword</Name> Per rispondere all'altra domanda: Quote:
Nel mio caso è del tipo http://ip.esterno.del.modem_:_porta/stringa_random, con tanto di ConnectionRequestUsername e ConnectionRequestPassword (casuali ma uguali ![]() Lo Zyxel dovrebbe avere il port mirroring, mi sa che conviene provare a sniffare il traffico e vedere che messaggi passano ![]() Edit: pare di sì, sperando che funzioni... ![]() ![]() Ultima modifica di Yramrag : 26-04-2018 alle 22:51. |
||
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
il ConnectionRequestUsername almeno nel mio caso è così formato OUI-ProductClass-SerialNumber ma comunque insieme al ConnectionRequestPassword lo negoziano: in pratica il CPE comunica il ConnectionRequestURL dove interrogarlo poi l'ACS chiede al CPE di impostare quel username e password per fargli fare l'accesso (per far cosa poi su quell'indirizzo non si sà
![]() inoltre in quell'analisi non viene data molta importanza al valore dell'header mustUnderstand che invece ho notato essere anchesso cruciale: se nelle request a seguire da parte del CPE non viene modificato con quello che da l'ACS in fase di inform, l'ACS non ti risponde riguardo la ParameterList anche quelli aggiuntivi da dove li hai tirati fuori? io nelle config del router non ho proprio nulla a riguardo credo facciano parte del firmware e ancora non ho capito se sono stringhe standardizzate o meno (se non si fosse capito mi riferisco proprio al nome dei parametri, e non al valore come username e password del voip) altra cosa importante credo sia che nel messaggio di inform dobbiamo simulare lo stato di reset completo del CPE e non di riavvio, perchè credo che sia solo in quel caso che l'ACS ci mandi la configurazione completa comunque vorrei riuscire a fare almeno un py che faccia la parte di inform (salvandosi i JSESSIONID e l'header mustUnderstand) ridurrebbe già di molto i tempi per poi fare le request successive dato che ad ogni errore L'ACS tende a terminarti la sessione e quindi bisogna reiniziare da capo a ricopiare tutti i valori a manina Ultima modifica di FrancYescO : 27-04-2018 alle 09:36. |
![]() |
![]() |
![]() |
#11 | |||
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
![]() Quote:
Quote:
Se riesco nei prossimi giorni provo a sniffare un po' di traffico; vediamo che salta fuori ![]() |
|||
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Promemoria: devo provare a sniffare dopo un factory reset...
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Sono riuscito a recuperare i dati voip con wireshark:
TUTTAVIA, temo non sia possibile recuperarli interrogando l'ACS. Nel mio caso, almeno, i dati voip arrivano in seguito a un Inform con un evento di tipo 6 CONNECTION REQUEST, quindi è l'ACS stesso che "fa il primo passo" stimolando il CPE. Se mando "a mano" un Inform di questo tipo, l'ACS mi risponde "204 No Content" perché non se lo aspetta. Quindi temo di essere in un vicolo cieco ![]() Edit: confermo che la password del voip è corretta; è la stessa che avevo già recuperato in precedenza. Ultima modifica di Yramrag : 30-04-2018 alle 01:49. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
Non ho ben capito alcune cose..
-il port mirroring lo hai attivato sulla porta HTTP del CPE (quella che comunica in fase di inform nel ConnectionRequestURL)? quindi i dati arrivano li? -la comunicazione vera e propria CWMP la riesci a sniffare con wireshark? l'ACS fa quel passo in base a qualcosa che il CPE gli ha comunicato nelle comunicazioni precedenti, il tutto sta nel simulare quello. insomma chiedere direttamente la password probabilmente non si può fare. ma bisogna replicare un "hei mi sono resettato" ricevendo di conseguenza tutta la config con la password il portmirroring è una bella trovata ma credo che lo Zyxel è l'unico modem tanto aperto fornito dagli ISP (infostrada) a permetterlo... capendo il meccanismo riusciremo invece facilmente a replicarlo per tutti gli ISP PS. se mandi un salvataggio della comunicazione sniffata (magari depurata da dati sensibili) mi piacerebbe dare un occhio anche a me |
![]() |
![]() |
![]() |
#16 | |||||
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
https://www.hwupgrade.it/forum/showp...postcount=1212 ho abilitato il port mirroring su ptm0 IN/OUT verso la porta LAN a cui ero collegato: da quello che ho capito replica (mirroring) tutto il traffico anche sulla porta LAN selezionata. Quote:
Quote:
![]() Quote:
Quote:
![]() |
|||||
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
Stavo dando un occhio a quello che hai sniffato (grazie) e non so se lo hai notato ma sembra che durante la negoziazione cambi il server acs:
quello iniziale è acswind.wind.it:8016 mentre quello che poi ciccia fuori i parametri è acswind.wind.it:7003 ... la request con il 6 CONNECTION REQUEST l'hai mandata al server giusto? intanto pian piano sto replicando la comunicazione con l'ACS tiscali, per ora sembra rispondere come mi aspetto, e sembra essere anche più semplice della comunicazione con quello infostrada... spero di arrivare quanto prima al punto ![]() |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
Stasera ci guardo, perché nel file di configurazione del modem non è mai indicata la porta 8016, e non so da dove l'abbia tirata fuori... ![]() |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: May 2010
Messaggi: 3042
|
Quote:
comunque, correggimi se sbaglio ma all'url di connection request (quello su cui il cpe si mette in listening) in pratica viene fatta solo una richiesta http, risposta in un modo che sembra statico, e senza alcuno scambio di dati all'interno ... forse gli serve solo per capire se il CPE ha accettato i parametri di user e password mandati in fase di inform (che per tiscali son sempre uguali) per poi continuare la comunicazione nello stesso modo |
|
![]() |
![]() |
![]() |
#20 | ||
Senior Member
Iscritto dal: Nov 2017
Città: Verona (VEROITBC)
Messaggi: 5359
|
Quote:
Quote:
Da come l'ho capita:
Per "uguali" intendi che sono costanti, o uguali tra loro? Nel mio caso corrispondono ai dati di "Connection Request User Name" e "Connection Request Password" che sono uguali (ovvero username = password), ma probabilmente sono rigenerati/re-inviati al reset. |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:26.