Fritz!Box DSL monitoring in Python
11 January 2019
Let’s start off the year with a small home project. I have a Fritz!Box 7430 DSL gateway (wireless router and VDSL modem). After I ran into degraded performance, I wanted to record how my line performs. The box has a web interface with mighty functionalities and it exposes nerdy data - although I’m still looking for the obvious "disconnect DSL" button, dude please. The interface is surprinsgly clear compared to the standard market crap (bbox I’m looking at you). It’s more expansive than a Sagem counterpart but it’s well worth it.
So you can get info like:
Maximum attainable throughput
CRC error count
Approximate cable length
and much more that I can imagine a usecase for.
But it does not record historic info, so I have no way to nag my ISP about reduced performance over the long run. And an error may be present long before I realise it (for instance after I started playing an online game or after I elected to Netflix and chill).
The obvious geeky thing to do was to write a tool that collects the relevant data. Python was the tool I needed for the job.
md5 encoded challenge. After I figured out what was going on, I found code emulating that process on GitHub and re-used it.
Too bad the FritzBox firmware is confused about how to handle data. On some pages, you can see JSON served by the box. But unfortunally, the info I need where stored on a page fully generated in HTML. So I went for good old ugly HTML scraping.
I still have to figure out how to interpret data and how to act on them. Probably I’ll add simple alerts for obvious cases.
In the meantime, here it is, licensed under GNU GPL.