Beantwoord

Connect Box - DOCSIS-info uitlezen buiten webinterface

  • 15 februari 2020
  • 30 reacties
  • 1929 keer bekeken


Toon eerste bericht
Dit topic is gesloten. Staat je antwoord hier niet bij, stel dan je vraag in een nieuw topic.

30 Reacties

Reputatie 6
Badge +7

Dank, ga ik proberen!

Update: gelukt! Het was nog best was uitzoekwerk voor een beginnende Python-gebruiker zoals ik. Om mijn Raspberry Pi (waar Nagios op draait) heb ik zowel Python 2.7 als 3.7 staan en ik moest pip installeren voor die laatste vanwege de vereiste die jij ook noemde in jouw bericht. In eerste instantie had ik pip alleen voor 2.7 geïnstalleerd en dat leverde foutmeldingen op bij het installeren van aiohttp. Toen eenmaal pip beschikbaar was voor 3.7 kon ik probleemloos de modules installeren (aiohttp en connect_box). Vervolgens nog even IP-adres (in mijn geval 192.168.100.1 vanwege bridge mode) en wachtwoord aanpassen in respectievelijk connect_box\__init__.py en example.py en tenslotte kon ik example.py uitvoeren (uiteraard slechts een klein gedeelte van de output):

:~/download/python-connect-box $ python3 example.py
[DownstreamChannel(frequency=458000000, powerLevel=9, modulation='256qam', id='24', snr=38.983, preRs=84710548030, postRs=2813, qamLocked=True, fecLocked=True, mpegLocked=True),
[UpstreamChannel(frequency=36000000, powerLevel=40, symbolRate='5.120', id='3', modulation='64qam', type='3', t1Timeouts=0, t2Timeouts=0, t3Timeouts=7, t4Timeouts=0, channelType='ATDMA', messageType=29),

Commando’s die ik heb uitgevoerd om het geheel te laten werken:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.7 get-pip.py
cd python-connect-box/
~/.local/bin/pip3.7 install aiohttp
~/.local/bin/pip3.7 install connect_box
python3 example.py

Voor de volledigheid, dit werkte dus niet:

~/.local/bin/pip install aiohttp

Nu nog uitvogelen hoe ik dit netjes in Nagios ga krijgen, maar het begin is er!

Reputatie 6
Badge +7

@tobiastheebe 

Ik weet niet of je al succes hebt gehad.

 

Na wat speurwerk ben ik ook nog een andere python versie gevonden om data te krijgen vanuit de connect box, en dit werk voor mij.

python-connect-box

 

Wat toevoegingen:

Vereist is python  minimaal 3.6.
 
Ook is nodig  aiohttp:
pip3 install aiohttp.
pip3 install connect_box 

in __init_.py verander host 192.168.0.1 in 192.168.178.1 

Data extracted voorbeelden:

DownstreamChannel(frequency=412000000, powerLevel=-4, modulation='256qam', id='24', snr=38.605, preRs=154607131870, postRs=458674, qamLocked=True, fecLocked=True, mpegLocked=True),
UpstreamChannel(frequency=52000000, powerLevel=52, symbolRate='5.120', id='1', modulation='16qam', type='3', t1Timeouts=0, t2Timeouts=0, t3Timeouts=56, t4Timeouts=0, channelType='ATDMA', messageType=29),
Device(mac='32:46:9A:17:E6:A6', hostname='Unknown', ip=IPv4Address('192.168.178.2'))


 

 

Reputatie 6
Badge +7

Ik kom er (nog) niet echt uit, wellicht door mijn gebrek aan ervaring met Python. Het liefst zou ik iets met PHP hebben, daar werk ik wel af en toe mee.

:~/download/compal_CH7465LG_py $ python setup.py
Traceback (most recent call last):
File "setup.py", line 2, in <module>
from setuptools import setup, find_packages
ImportError: No module named setuptools

Wanneer ik dit stukje code probeer te draaien:

import os
import time
from compal import *

modem = Compal('192.168.100.1', os.environ['ROUTER_CODE'])
modem.login()

# Or find all possible functions of the modem:
scan = FuncScanner(modem, 0, os.environ['ROUTER_CODE'])
while scan.current_pos < 101:
print(scan.scan().text)

# If you want to go back to 'normal':
# modem.reboot() # or
# modem.factory_reset()

# And logout
modem.logout()
:~/download/compal_CH7465LG_py $ python test.py
Traceback (most recent call last):
File "test.py", line 3, in <module>
from compal import *
File "/home/me/download/compal_CH7465LG_py/compal/__init__.py", line 354
def add_forward(self, local_ip, ext_port, int_port, proto: Proto,
^
SyntaxError: invalid syntax

De developer geeft overigens zelf aan, dat hij de scripts alleen voor zijn use case heeft geschreven.

Reputatie 6
Badge +7

Dank voor de reactie en de link. Het gebrek aan SNMP is inderdaad vervelend. Ik verwacht dat het geen beperking is van de hardware, maar eerder van de Ziggo-firmware.

Ik ga eens kijken of ik uit de voeten kan met de code, heb zelf (nog) geen ervaring met Python.

Reputatie 3
Badge +3

De reden dat je geen replay kunt doen van de request is omdat er een functie in de javascript zit die de laatste sessieToken uit de cookie gebruikt om een nieuwe request te maken (functie updateToken), waar die laatste waarde wil onderdeel is van de volgende request. Gezien je ook maar met een gebruiker kunt inloggen snap je vast dat het voor een proof op concept wel aan de praat te krijgen is. Het begin is NoticeLogin() te implementeren die je in common_api.js kunt vinden.

Het mooiste zou natuurlijk zijn om een SNMP toegang te hebben en eigenlijk is het onvoorstelbaar dat dit soort functionaliteit niet in het modem zou zitten. Of bewust door Ziggo wordt uitgezet. 

Ik zou zelf ook wel geïnteresseerd zijn in een stukje code dat dit kan monitoren. Bij ADSL kun je hier ook veel beteren inzichten uit krijgen dan KPN zelf heeft.

Dit vind je vast interessant: https://github.com/ties/compal_CH7465LG_py