#1 14-04-2015 17:20:26

Jackos81
Membre
Date d'inscription: 02-04-2015
Messages: 21
Site web

[SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonjour,

Nouvel abonné Orange avec le VDSL2 je ne sais pas à quoi m’attendre au niveau de la stabilité de ma connexion. La technologie VDSL2 étant fortement sensible aux caractéristiques de la ligne et le DLM pouvant intervenir à mon insu, je me suis penché sur une solution simple à mettre en oeuvre pour "monitorer" tout ça sans tomber dans la parano.

J’ai donc réalisé un script VBS qui récupère les données qualitatives & techniques de la Livebox et les enregistre sous forme d’historique dans un fichier texte au format CSV. Ces informations sont ensuite exploitables sous tableur ou autre pour une vision plus confortable.
Personnellement j’utilise le planificateur de taches pour son exécution à chaque démarrage (décalé de quelques secondes), au moindre doute je peux consulter le fichier historique pour vérifier.

Utilisation du script :
- Placer ce script enregistré en .vbs, et "curl.exe" (*) où vous voulez en vérifiant les droits en écriture.
- Modifier si nécessaire l’adresse IP et le mot de passe de votre box dans le script.

Fonctionnement à l’exécution :
- Récupération des données qualitatives et techniques de connexion,
- Test du ping,
- Ajout des informations au fichier historique,
- Suppression des fichiers temporaires,
- Les fichiers de données qualitatives et techniques sont conservés pour consultation.

A savoir :
- Ce script n’effectue aucune modification sur la configuration de la Livebox, il agit simplement en lecture.
- Du fait des demandes qu’il envoie à la box et sur internet, son exécution peut prendre 2 à 3 secondes (http POST et Ping).
- Je ne suis pas un PRO du VBS, le script peut surement être optimisé, mais il fonctionne smile


Testé sur :
- Windows 8.1 x64
- Livebox Play,Livebox 2
- Firmwares SG30_sip-fr-5.7.16.1, SG20_sip-fr-4.37.3.1

(*)
cURL : http://curl.haxx.se/
Téléchargement du "Win32 - Generic" : http://www.paehl.com/open_source/?CURL_7.41.0


N’hésitez à me faire part de vos remarques/retours sur son fonctionnement sur d'autres modèles/firmwares, je découvre la Livebox , et si vous avez des idées de script n’hésitez pas non plus smile

Exemple du fichier historique "HistoriqueLIVEBOX.txt" créé par le script :
http://liveboxs.craym.eu/ftp_upload/HistoLB-.jpg

Exemple d'une représentation graphique du fichier historique "HistoriqueLIVEBOX.txt" sous un tableur :
http://liveboxs.craym.eu/ftp_upload/InfosLB-.jpg


Le script :

Code:

'=====================================================================================================
'================================= HistoriqueLivebox_CSV.vbs =========================================
'=====================================================================================================
'= Script VBS destine a creer un historique du statut de la Livebox dans un fichier
'= texte au format CSV permettant son traitement sous tableur ou autre.
'=
'= IMPORTANT :
'=  - Ce script fonctionne avec cURL, il doit etre accessible
'=     - Aucune modification n’est apportee a la configuration de la Livebox
'=
'= LIMITATIONS :
'=     - Le fonctionnement du script n’est plus  garanti en cas de mise a jour du Firmware de la Livebox,
'=     - Non teste sur les modeles anterieurs a Livebox Play et autre Firmware.
'=
'= Utilisation :
'=  - Telecharger cURL
'=  - placer les 2 fichiers suivants dans un dossier : 
'=       - Ce script, enregistre avec l'extension .vbs
'=       - Le fichier curl.exe
'=  - Editer si besoin l'IP et le MOT DE PASSE de la box plus bas dans ce script
'=  - Lancer le script, 3 fichiers seront crees et seront actualises a chaque lancement du script :
'=          - getDSLStats.txt : donnees qualitatives
'=          - getMIBs.txt : donnees techniques
'=          - HistoriqueLIVEBOX.txt : historique des valeurs au format CSV
'=  - Si le fichier exemple (HistoriqueLIVEBOX.xlsm) est présent dans le repertoire, il suffit
'=    de l'ouvrir pour consulter les donnees et les graphiques generes dynamiquement.
'=
'= Version 1.1 du 13/04/2015
'= Firmwares compatibles : SG30_sip-fr-5.7.16.1 // SG20_sip-fr-4.37.3.1
'= 
'= Jackos 2015
'=====================================================================================================
'=====================================================================================================
' INFORMATIONS D'ACCES A LA LIVEBOX (A MODIFIER SELON CONFIGURATION)
LIVEBOX = "192.168.1.1"
PASSWORD = "admin"
URLPING = "www.orange.fr"
'================================================================================
'================================================================================
' ATTENTION : CHANGER LES VARIABLES SUIVANTES PEUT ENTRAINER UN DYSFONCTIONNEMENT
'================================================================================
USER = "admin"
COOKIES = "./cookies.txt"
CONTTYP = """Content-type: application/json"""
PARAMSgetDSLStats = """{\""parameters\"":{}}"""
PARAMSgetMIBs = """{\""parameters\"":{\""mibs\"":\""dsl\"",\""flag\"":\""\"",\""traverse\"":\""down\""}}"""
'================================================================================
' Declarations
Const ForReading = 1, ForWriting = 2, ForAppending = 8, WindowStyle = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject ("WSCript.shell")
'=================================================================================
' Test existence du fichier historique, si oui=>OK, si non(1er lancement) creation
'=================================================================================
If NOT (objFso.FileExists("HistoriqueLIVEBOX.txt")) Then
   objFso.CreateTextFile("HistoriqueLIVEBOX.txt").Write chr(34) & "Numero" & chr(34) & "," & chr(34) & "Date" & chr(34) & "," _
        & chr(34) & "Heure" & chr(34) & "," & chr(34) & "Ping" & chr(34) & "," & chr(34) & "LastChangeTime" & chr(34) & "," _
        & chr(34) & "LastChange" & chr(34) & "," & chr(34) & "UpstreamCurrRate" & chr(34) & "," & chr(34) & "DownstreamCurrRate" & chr(34) & "," _
        & chr(34) & "UpstreamMaxRate" & chr(34) & "," & chr(34) & "DownstreamMaxRate" & chr(34) & "," & chr(34) & "UpstreamNoiseMargin" & chr(34) & "," _
        & chr(34) & "DownstreamNoiseMargin" & chr(34) & "," & chr(34) & "UpstreamAttenuation" & chr(34) & "," & chr(34) & "DownstreamAttenuation" & chr(34) & "," _
        & chr(34) & "UpstreamPower" & chr(34) & "," & chr(34) & "DownstreamPower" & chr(34) & "," & chr(34) & "DataPath" & chr(34) & "," _
        & chr(34) & "InterleaveDepth" & chr(34) & "," & chr(34) & "ModulationType" & chr(34) & "," & chr(34) & "ModulationHint" & chr(34) & "," _
        & chr(34) & "FirmwareVersion" & chr(34) & "," & chr(34) & "CurrentProfile" & chr(34) & "," & chr(34) & "ReceiveBlocks" & chr(34) & "," _
        & chr(34) & "TransmitBlocks" & chr(34) & "," & chr(34) & "CellDelin" & chr(34) & "," & chr(34) & "LinkRetrain" & chr(34) & "," _
        & chr(34) & "InitErrors" & chr(34) & "," & chr(34) & "InitTimeouts" & chr(34) & "," & chr(34) & "LossOfFraming" & chr(34) & "," _
        & chr(34) & "ErroredSecs" & chr(34) & "," & chr(34) & "SeverelyErroredSecs" & chr(34) & "," & chr(34) & "FECErrors" & chr(34) & "," _
        & chr(34) & "ATUCFECErrors" & chr(34) & "," & chr(34) & "HECErrors" & chr(34) & "," & chr(34) & "ATUCHECErrors" & chr(34) & "," _
        & chr(34) & "CRCErrors" & chr(34) & "," & chr(34) & "ATUCCRCErrors" & chr(34) & vbCrLf
End If
'=======================================
' Recuperation des donnees de la Livebox
'=======================================
' Authentification Livebox
On Error Resume Next
objShell.run "curl -X POST -H " & CONTTYP & " -c " & COOKIES & " ""http://" & LIVEBOX & "/authenticate?username=" & USER & "&password=" & PASSWORD & """ -o X-Context.txt", 0, true
If Err.Number <> 0 Then
    MsgBox("ATTENTION :" & vbCrLf & "Le fichier curl.exe n'est pas accessible !" & vbCrLf & "L'execution du script est interrompue.")
    WScript.Quit()
End If
' Traitement du fichier X-Context.txt
set FichTraitmtSID = objFso.OpenTextFile("X-Context.txt.", ForReading)
do until FichTraitmtSID.atEndOfStream
    'Ouverture du fichier
    ligne=FichTraitmtSID.readline
    ' Mise en variable de X-Context
    CoupGauch = right(ligne, (len(ligne) - InStr(ligne,"contextID"":""") - 11))
    CLE_SID = left(CoupGauch, (LEN(CoupGauch)-3))
loop
Set FichTraitmtSID = Nothing
' Recuperation des donnees qualitatives
objShell.run "curl -b " & COOKIES & " -X POST -H " & CONTTYP & " -H ""X-Context: " & CLE_SID & """ " & "-d " & PARAMSgetDSLStats & " ""http://" & LIVEBOX _
        & "/sysbus/NeMo/Intf/dsl0:getDSLStats"" -o getDSLStats.txt",WindowStyle,true
' Recuperation des donnees techniques
objShell.run "curl -b " & COOKIES & " -X POST -H " & CONTTYP & " -H ""X-Context: " & CLE_SID & """ " & "-d " & PARAMSgetMIBs & " ""http://" & LIVEBOX _
        & "/sysbus/NeMo/Intf/data:getMIBs"" -o getMIBs.txt",WindowStyle,true
' Logout
objShell.run "curl -b " & COOKIES & " -X POST ""http://" & LIVEBOX & "/logout""",WindowStyle,true
Set objShell = Nothing
'=====================================
' Suppression des fichiers temporaires
'=====================================
objFSO.DeleteFile "cookies.txt"
objFSO.DeleteFile "X-Context.txt"
'===========================================================================
' Presentation du fichier getDSLStats.txt (Donnees qualitatives de la ligne)
'===========================================================================
set FichDSLStats = objFso.OpenTextFile("getDSLStats.txt.", ForReading)
do until FichDSLStats.atEndOfStream
    ' Ouverture du fichier
    ligne=FichDSLStats.readline
    ' Suppression des caracteres inutiles
    CoupGauch = right(ligne, (len(ligne) - InStr(ligne,"status") - 8))
    DSLStats = left(CoupGauch, (LEN(CoupGauch)-3))
loop
FichDSLStats.Close
' Ajout de retours a la ligne
set rx = New RegExp
with rx
    .Pattern = ",""" : .Global = true
end with
objFso.CreateTextFile("getDSLStats.txt").Write rx.Replace(DSLStats, "," & VbCrLf & """") & VbCrLf
Set FichDSLStats = Nothing
'=====================================================================
' Presentation du fichier getMIBs.txt (Donnees techniques de la ligne)
'=====================================================================
set FichMIBs = objFso.OpenTextFile("getMIBs.txt.", ForReading)
do until FichMIBs.atEndOfStream
    ' Ouverture du fichier
    ligne=FichMIBs.readline
    ' Suppression des caracteres inutiles
    CoupGauch = right(ligne, (len(ligne) - InStr(ligne,"status") - 23))
    MIBs = left(CoupGauch, (LEN(CoupGauch)-5))
loop
FichMIBs.Close
' Ajout de retours a la ligne
set rx = New RegExp
with rx
    .Pattern = ",""" : .Global = true
end with
objFso.CreateTextFile("getMIBs.txt").Write rx.Replace(MIBs, "," & VbCrLf & """") & VbCrLf
Set FichMIBs = Nothing
'=============
' Test du PING
'=============
Set wmi = GetObject("winmgmts:")
For i = 1 to 4
    Set ping = wmi.Get("Win32_PingStatus.Address=""" & URLPING & """")
    If Not (IsNull(ping.StatusCode) Or ping.StatusCode) Then
        total = total + ping.ResponseTime
    Else
        injoignable = 0
    End If
Next 'i
If total > injoignable then
    moyennePing = (FormatNumber(total / 4,0))
Else
    moyennePing = 0
End If
Set wmi = Nothing
Set ping = Nothing
'=====================================================
' Decompte des lignes deja presentes dans l'historique
'=====================================================
FichHist = objFSO.OpenTextFile("HistoriqueLIVEBOX.txt", ForReading).ReadAll
arrLignes = Split(FichHist,vbCrLf)
Compteur = UBound(arrLignes)
'==================================================================
' Ouverture du fichier getMIBs.txt (Donnees techniques de la ligne)
'==================================================================
Set FichTraitmt1 = objFSO.OpenTextFile("getMIBs.txt", ForReading)
    ContenuFichier = Split(FichTraitmt1.ReadAll, vbNewLine)
    FichTraitmt1.Close
    ' Suppression d'infos peu utiles pour l'historique
    Report = ""
For Each Ligne In ContenuFichier
    If InStr(Ligne,"LinkStatus") > 0 Or InStr(Ligne,"StandardsSupported") > 0 Or InStr(Ligne,"StandardUsed") > 0 Or InStr(Ligne,"UPBOKLE") > 0 Then
        Report = Report
    Else
        If Len(Report) = 0 Then
            Report = Ligne
        Else
            Report = Report & vbCrLf & Ligne
        End If
    End If
Next
' Ajout du numero d'ordre, de la date, de l'heure et du Ping en début
NouvContenu = (chr(34) & "Numero" & chr(34) & ":" & Compteur & "," & VbCrLf & chr(34) & "Date" & chr(34) & ":" & Date() & "," & VbCrLf & chr(34) & "Heure" & chr(34) & ":" _
                    & FormatDateTime(Now(),vbShortTime) & "," & VbCrLf & chr(34) & "Ping" & chr(34) & ":" & moyennePing & ",") & vbCrLf & Report
Set FichTraitmt1 = Nothing
'========================================================================
' Ouverture du fichier getDSLStats.txt (Donnees qualitatives de la ligne)
'========================================================================
Set FichTraitmt2 = objFSO.OpenTextFile("getDSLStats.txt", ForReading)
FichSource1 = FichTraitmt2.ReadAll
FichTraitmt2.Close
' Ajout des informations totales au fichier InfosLIVEBOX.txt
objFso.CreateTextFile("InfosLIVEBOX.txt").Write NouvContenu & FichSource1
Set FichTraitmt2 = Nothing
'========================================================
' Preparation des donnees a inclure au fichier historique
'========================================================
set FichTraitmt3 = objFso.OpenTextFile("InfosLIVEBOX.txt", ForReading)
set FichTraitmt4 = objFso.CreateTextFile("InfosLIVEBOX_1.txt")
do until FichTraitmt3.atEndOfStream
    'Ouverture ligne par ligne du fichier contenant les dernieres infos
    ligne=FichTraitmt3.readline
    'Ecriture des infos dans un fichier temporaire en effaçant tout ce qui se trouve a gauche des valeurs
    FichTraitmt4.writeline right(ligne, (len(ligne) - InStr(ligne,""":") - 1))
loop
Set FichTraitmt3 = Nothing
Set FichTraitmt4 = Nothing
'====================================================================================================
' Suppression des retours a la ligne pour la structure CSV et ajout des donnees au fichier historique
'====================================================================================================
FichTraitmt5 = objFso.OpenTextFile("InfosLIVEBOX_1.txt", ForReading).ReadAll
set rx = New RegExp
with rx
    .Pattern = "\r?\n" : .Global = true
end with
objFso.OpenTextFile("HistoriqueLIVEBOX.txt", ForAppending).Write rx.Replace(FichTraitmt5, "") & VbCrLf
'=====================================
' Suppression des fichiers temporaires
'=====================================
objFSO.DeleteFile "InfosLIVEBOX.txt"
objFSO.DeleteFile "InfosLIVEBOX_1.txt"
Set objFSO = Nothing
'======================================================================
' Les fichiers getMIBs.txt et getDSLStats.txt sont conserves tels quels
' pour d'eventuelles consultations de l'intégralite des donnees puisque
' certaines ont ete supprimees plus haut pour alleger l'historique
'======================================================================

Edit du 17/04/15 : Ajout firmware compatible.

Dernière modification par Jackos81 (17-04-2015 16:59:33)


Livebox Play | NRA: 81081DOU | Distance: 442m | Atténuations ADSL: 11dB-6dB | Débits IP: 20Mb/s-0.9Mb/s
SG30_sip-fr-5.12.13.1                    Atténuations VDSL: 20dB-6dB | Débits IP: 70Mb/s-22Mb/s

Hors ligne

 

#2 16-04-2015 23:38:50

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonsoir.

Je confirme le bon fonctionnement sur LiveBox 2 smile

Et j'aurai appris quelque chose avec :

PARAMSgetMIBs = """{\""parameters\"":{\""mibs\"":\""dsl\"",\""flag\"":\""\"",\""traverse\"":\""down\""}}"""

Peux-tu nous dire où tu as "pêché" cette "subtilité" ?

[HS]
Dommage qu'il faille se "payer" la compréhension d'un langage (vbs) à la limite de l'imbuvable pour faire ça sous DOS/Windows (mais ce n'est pas ta faute, je souligne indirectement par-là ton mérite à créer des programmes dans ce langage ...)
[/HS]


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#3 17-04-2015 16:54:41

Jackos81
Membre
Date d'inscription: 02-04-2015
Messages: 21
Site web

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonjour et merci pour le retour,

Bonne nouvelle concernant la LiveBox 2, je vais éditer le premier message pour l’ajouter.

Concernant les paramètres, c’est ce que l’on voit dans l’onglet du même nom lorsqu’on examine la page, alors que dans l’onglet "Réponse" apparaissent les différentes informations qui nous intéressent.
https://i.imgur.com/nqp3wWf.jpg

Si on envoie la requête sans paramètres on obtiendra certes plus d’informations, mais plus difficiles à "parser" et le fichier obtenu dans ce cas ne contient (en plus de celles qui nous intéressent) que des données statiques pour la plupart.

Je voulais le faire en bash dès le départ, mais comme je ne suis pas prêt de relancer mon serveur il me fallait quelque chose rapidement au vu du nombre de sujets postés dans "Connexion, débit et incidents réseau"… donc je voulais suivre ça de près au cas où smile


Livebox Play | NRA: 81081DOU | Distance: 442m | Atténuations ADSL: 11dB-6dB | Débits IP: 20Mb/s-0.9Mb/s
SG30_sip-fr-5.12.13.1                    Atténuations VDSL: 20dB-6dB | Débits IP: 70Mb/s-22Mb/s

Hors ligne

 

#4 18-04-2015 00:36:46

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonsoirjour smile

Je n'utilise pratiquement jamais l'inspecteur intégré du navigateur, plutôt Firebug, et je reconnais que dans ta capture, c'est parlant smile

Tu le sais probablement, mais peut-être pas tout le monde : Bash existe pour Windows (en "standalone" ou avec beaucoup d'autres outils du monde Unix/Linux) ...

[HS]
Je serais d'ailleurs d'avis qu'on impose Bash comme shell de base - à la rigueur un busybox avec tous les outils Unix/Linux intégrés - à la place de CMD sur les différents Windows smile
J'ai toujours l'impression d'être maso quand je me mets à scripter en .cmd hmm
[/HS]


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#5 18-04-2015 09:48:23

pace06
On est bien ici
Lieu: PACA
Date d'inscription: 27-07-2011
Messages: 274

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonjour,

Quelqu'un aurait essayé Windows PowerShell :

http://fr.wikipedia.org/wiki/Windows_PowerShell


Open Zen, Sony Z Ultra, Livebox 3 SG30_sip-fr-5.12.13.1, TV SAT : UHD87 SAT, Golden Wizard HD + cartes BIS et TIVUSAT
http://www.ariase.com/fr/media/ligne/06/06059EZT/tlfOr.png

Hors ligne

 

#6 18-04-2015 14:32:50

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonjour.

Je l'ai un peu essayé, et même s'il apporte de la puissance, je ne le trouve pas simple du tout.
Qui plus est, selon la version dont on dispose (ainsi que selon la version de Windows), certaines options/commandes ne sont pas disponibles.

Attention : On dérive du sujet initial (et j'y ai contribué), il vaudra peut-être mieux créer une nouvelle discussion ...


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#7 18-04-2015 16:27:02

Jackos81
Membre
Date d'inscription: 02-04-2015
Messages: 21
Site web

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Bonjour,

J’ai hésité quelques secondes à utiliser "Cygwin" ou un autre plus léger, mais n’ayant jamais testé ces émulateurs sous Windows j’avais peur de leur comportement notamment en planification de tâches pour l’exécution de scripts, du coup j’ai abandonné l’idée tongue

Sinon pour PowerShell, personnellement je l’ai utilisé simplement pour passer des commandes qui ne pouvaient plus l’être par l’invite de commande… et je n’irai pas plus loin avec sauf si le cas se représente.

Pour revenir au sujet, pace06, as-tu finalement des résultats avec l’autre script ou celui-ci ?


Livebox Play | NRA: 81081DOU | Distance: 442m | Atténuations ADSL: 11dB-6dB | Débits IP: 20Mb/s-0.9Mb/s
SG30_sip-fr-5.12.13.1                    Atténuations VDSL: 20dB-6dB | Débits IP: 70Mb/s-22Mb/s

Hors ligne

 

#8 18-04-2015 19:29:00

pace06
On est bien ici
Lieu: PACA
Date d'inscription: 27-07-2011
Messages: 274

Re: [SCRIPT] Toutes les infos de la Livebox dans un fichier CSV

Je vais re-essayer demain dimanche, je te tiens au courant.


Open Zen, Sony Z Ultra, Livebox 3 SG30_sip-fr-5.12.13.1, TV SAT : UHD87 SAT, Golden Wizard HD + cartes BIS et TIVUSAT
http://www.ariase.com/fr/media/ligne/06/06059EZT/tlfOr.png

Hors ligne

 

Powered by PunBB
© Copyright 2002–2008 PunBB