Library and command line tool for reading xDSL stats

xDSL Stats Parser

This is a library and command line tool for reading basic xDSL stats, as well bitloading, SNR, QLN and Hlog data. It supports many different kinds of modems.

Please note that this is unfinished software at the moment. The command line tool works, but the API of the library is not final yet and there will be incompatible changes.

Building

Go needs to be installed. Run the following command to build the command line tool:

go build -o dsl cmd/main.go

Note: If you are using Windows, use the option -o dsl.exe instead, and adjust the commands listed below as necessary.

Usage

A few usage examples for different modems are listed below.

In general, if the device requires a username, you need to specify it on the command line using the -u option. When connecting using SSH, your OpenSSH private key and known_hosts file are tried by default, but it is possible to override this. Otherwise, if the device uses password authentication, you will be asked for it.

To get more detailed usage information, see ./dsl -help.

Broadcom

./dsl -d broadcom_ssh -u root 192.168.1.1
./dsl -d broadcom_telnet -u root 192.168.1.1

If the command on the device is not named xdslctl, you need to specify the correct name using the -o Commmand option.

DrayTek

./dsl -d draytek_telnet 192.168.1.1

While there is an SSH server on DrayTek devices, it is not supported at the moment, as the Go SSH client is incompatible with the tested device due to an unsupported DSA key size.

FRITZ!Box

./dsl -d fritzbox -o LoadSupportData=0 fritz.box

The option -o LoadSupportData is optional, and it is off by default. Set it to 1 to enable loading additional information from the support data, such as QLN and Hlog data. This will take significantly longer to load.

Lantiq

./dsl -d lantiq_ssh -o Command="dsl_cpe_pipe.sh" -u root openwrt.lan # OpenWrt
./dsl -d lantiq_telnet -o Command="/ifx/vdsl2/dsl_pipe" 192.168.16.249 # VINAX modem

If no command is specified, dsl_cpe_pipe is used. Since the actual name varies a lot on different devices, you'll have to find out the right one for your device.

MediaTek

./dsl -d mediatek_ssh -u admin 192.168.1.1
./dsl -d mediatek_telnet -u admin 192.168.1.1

Sagemcom

./dsl -d sagemcom speedport.ip

There tend to be data quality issues on at least some of the supported devices. For example, only the "Actual Data Rate" is reported instead of the "Actual Net Data Rate". This means that the reported data rate is not comparable with other devices when retransmission is active.

Owner
Comments
  • Authenticating… failed: no prompt detected

    Authenticating… failed: no prompt detected

    hello

    I'm trying to connect to Zte h168n and with this command "dsl -d mediatek_telnet -u root 192.168.1.1" and it gives me this error no prompt detected

  • Billion 8800NL support

    Billion 8800NL support

    This is mostly the same as the Broadcom code, although the main difference is the different login prompt, which prevented the generic Broadcom device type working for me.

    P.S. Thanks for creating this. I found DSLstats recently which helped me diagnose some issues with my phone line, but it looks like that isn't going to receive any more updates, and so it's good to see an open source project taking up the mantle.

  • Speedport Pro Plus - Status 307

    Speedport Pro Plus - Status 307

    Unable to read DSL Stats of the Speedport Pro Plus running Firmware 120141.5.0.013.0

    PS C:\Users\Maxim\Downloads\go-dsl-master> ./dsl -d speedport speedport.ip
    
    Connecting… failed: request for /html/login/index.html failed with status 307
    PS C:\Users\Maxim\Downloads\go-dsl-master> ./dsl -d speedport 10.10.1.1
    
    Connecting… failed: request for /html/login/index.html failed with status 307
    
  • dsl-gui ssh login fails when a passphase is used to secure access to the private keys

    dsl-gui ssh login fails when a passphase is used to secure access to the private keys

    So I "secured" access to my private keys behind a passphrase and the CLI application sort of works:

    computer:go-dsl user$ ./dsl
    
    Connecting… passphrase required
    Fingerprint: SHA256:rcl9qcANmVORxAH5pPkMDL8TCtu+Z9jDNVmfTKLdjqo
    Passphrase: 
    Authenticating… done
    Loading data… done
    
               State:    Showtime
                Mode:    VDSL2 Profile 17a
              Uptime:    32 days, 16 hours, 11 minutes
    
              Remote:    Broadcom 12.4.127 (194.127)
               Modem:    Infineon 5.9.1.4.0.7
    
         Actual rate:      116797 kbit/s      36998 kbit/s 
     Attainable rate:      140083 kbit/s      40043 kbit/s 
             MINEFTR:       81349 kbit/s    1730261 kbit/s 
    
             Bitswap:          on                on        
       Rate adaption:         off               off        
    
        Interleaving:        0.14 ms              0 ms     
                 INP:        40.0 symbols      44.0 symbols
      Retransmission:          on                on        
    
           Vectoring:        full              full        
    
         Attenuation:         9.8 dB            8.3 dB     
          SNR margin:        12.5 dB            8.5 dB     
      Transmit power:        14.5 dBm          -3.5 dBm    
    
        RTX TX Count:      335827             37924        
         RTX C Count:       32108            223166        
        RTX UC Count:         762           1487052        
    
           FEC Count:           0              4298        
           CRC Count:          23               321        
    
            ES Count:           5               128        
           SES Count:           1                76        
    

    but when I try the same with dsl-gui I get a prompt "The device requests a password" which neither accepts:

    1. an empty password
    2. the modems password
    3. my ssh passphrase:
    computer:go-dsl user$ ./dsl-gui 
    setting password failed: no password required
    setting password failed: no password required
    setting password failed: no password required
    

    Which is a pity as the 4 "spectral" plots are really nice and informative.

  • Speedport Smart 4 - can't connect

    Speedport Smart 4 - can't connect

    I've tried the following commands:

    ./dsl -d speedport speedport.ip -- Result: Connecting… failed: no challenge found

    ./dsl -d sagemcom speedport.ip -- Result: Connecting… failed: request for /js/gui-core.js failed with status 404

    Am I doing something wrong?

  • Documentation/PR on github page

    Documentation/PR on github page

    Maybe you could add a screen shot of the GUI view of your tool to the github description, so potential users can immediately see what they can expect?

  • feature requests: tighter axis limits for QLN and Hlog plots

    feature requests: tighter axis limits for QLN and Hlog plots

    Interpretation of Hlog and QLN plots mostly depends on looking at the precise curves and deviations from theoretical curve "forms". This gets easier if the plot is centered more on the actual range of the individual data compared the the current fixed? and quite generous limits (QLN: -70 to -160 dBm/Hz; Hlog: 0 to -100 dB)

    Also a genuine question, why displaying the QLN as bar and not (as is done customarily) as line graph?

    Final thought: the up/down qualification in the plots could be slightly more prominent, the current color scheme is quite elegant, but also quite subtle. Maybe turn up the color for these and plot these behind the actual data (currently they seem overlayed)?his would require different colors for max and min on the SNR plots though). But this is mostly cosmetic and a matter of preference, so if you prefer your current design, that also works.

  • feature request: bitswaps per sub-carrierer graphs

    feature request: bitswaps per sub-carrierer graphs

    DSLstats for broadcom modems has a very interesting plot for diagnosing potential problem, in which it displays the count of Bitloading changes per carrier. I am not sure how this is implemented, but in theory it should be enough to take the absolute difference between consecutive bitloading data and just plot the count of these bitswap events per carrier. That will not be 100% correct (e.g. two bitswaps between samples might cancel each other out) but should show problematic carriers relative well.

Related tags
github stats from the command line
github stats from the command line

Retrieve GitHub statistics per username from the command line: no need to open the browser anymore!

Sep 8, 2022
An open-source GitLab command line tool bringing GitLab's cool features to your command line
An open-source GitLab command line tool bringing GitLab's cool features to your command line

GLab is an open source GitLab CLI tool bringing GitLab to your terminal next to where you are already working with git and your code without switching

Dec 30, 2022
A command line tool to prompt for a value to be included in another command line.

readval is a command line tool which is designed for one specific purpose—to prompt for a value to be included in another command line. readval prints

Dec 22, 2021
Speaker command reads aloud the text message. It supports multilingual voice reading

speaker - Read the text aloud speaker command reads aloud the text message. It supports multilingual voice reading. If you want the time signal, the s

Aug 22, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.

Table of contents Introduction Reference Contributing Introduction Overview git-xargs is a command-line tool (CLI) for making updates across multiple

Dec 31, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command

git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command. You give git-xargs:

Feb 5, 2022
A command line tool for simplified docker volume command built with go

dockervol A command line tool for simplified docker volume command built with go. Features: Remove anonymous volume (beta) Remove volume by matching n

Dec 18, 2021
A golang CLI to display various stats about Hockey teams and their players

A golang CLI to display various stats about Hockey teams and their players

Oct 26, 2021
Show Languages In Code. A fast and lightweight CLI to generate stats on the languages inside your project
Show Languages In Code. A fast and lightweight CLI to generate stats on the languages inside your project

slic Show Languages In Code. Usage Run it with an -h flag to list all commands. -d flag can be used to specify the directory of search -i flag can be

Dec 25, 2021
fofax is a fofa query tool written in go, positioned as a command-line tool and characterized by simplicity and speed.
fofax is a fofa query tool written in go, positioned as a command-line tool and characterized by simplicity and speed.

fofaX 0x00 Introduction fofax is a fofa query tool written in go, positioned as

Jan 8, 2023
🐙🐱🖥️ GitHub stats in your terminal
🐙🐱🖥️ GitHub stats in your terminal

?? ?? ??️ octotui - GitHub stats in terminal Inspired by metrics & github-profile-summary-cards & github-tui ?? Data - irevenko/octostats TUI - termui

Dec 25, 2022
Github user stats fetch written in golang
Github user stats fetch written in golang

TACOMA It's like neofetch, but for github users. I saw something similar on reddit and decided to recreate it using only golang. Original inspiration:

Dec 24, 2021
Pi-fetch - get a summary of your pi-hole stats from your terminal

pi-fetch get a summary of your pi-hole stats from your terminal _ ___ _ _ ___|_|___| _|___| |_ ___| |_ | . | |___| _| -_| _

Jan 9, 2022
A command-line tool and library for generating regular expressions from user-provided test cases
A command-line tool and library for generating regular expressions from user-provided test cases

Table of Contents What does this tool do? Do I still need to learn to write regexes then? Current features How to install? 4.1 The command-line tool 4

Jan 9, 2023
A Go library and a command-line tool to manage Docker Swarm clusters

go-swarm go-swarm is a Go library and command-line tool for managing the creation and maintenance of Docker Swarm cluster. Features: Creates new Swarm

Jul 26, 2022
Gowebdav - A golang WebDAV client library and command line tool.

GoWebDAV A golang WebDAV client library. Main features gowebdav library allows to perform following actions on the remote WebDAV server: create path g

Jan 3, 2023
Watcher - A simple command line app to watch files in a directory for changes and run a command when files change!

Watcher - Develop your programs easily Watcher watches all the files present in the directory it is run from of the directory that is specified while

Mar 27, 2022
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.

asciigraph Go package to make lightweight ASCII line graphs ╭┈╯. Installation go get github.com/guptarohit/asciigraph Usage Basic graph package main

Jan 8, 2023
Package command provide simple API to create modern command-line interface

Package command Package command provide simple API to create modern command-line interface, mainly for lightweight usage, inspired by cobra Usage pack

Jan 16, 2022