Tips en Trucs 2019

Internetsnelheid testen met Speedtest-cli

Soms is het internet traag, maar ligt dat aan de internetverbinding of aan de webserver die je voor het ogenblik gebruikt.

Om de internetverbinding te testen, bestaan verschillende online webpagina's om de snelheid van jouw internetverbinding te meten. Maar dan moet je de vele advertenties erbij nemen. Deze online meetpagina's laden eerst JavaScript code in de browser om een nabijgelegen meetserver op te sporen. Daarna worden er op verschillende manieren (HTTP GET en POST) gegevens met deze meetserver uitgewisseld om de snelheid van de internetverbinding te bepalen. Werk je in een grafische omgeving en een browser dan kan je zo'n online snelheidsmeter gebruiken.

Om de snelheid (bandbreedte) van jouw internetverbinding in een terminal te testen, kan je het python script speedtest.py gebruiken. Speedtest.py meet de bandbreedte van jouw internetverbinding niet met HTTP, maar via sockets. Daar speedtest.py een andere meettechniek gebruikt, kunnen de resultaten van de online en speedstest.py opdracht verschillen. Over welke twee meettechnieken de beste is, valt te discussiëren. Maar beiden geven een goed beeld van de download- en uploadsnelheid van de internetverbinding.

Speedtest installeren

Speedtest kan je installeren via de standaard openSUSE softwarebronnen, maar dan krijg je een oude versie. Daarenboven is Speedtest een python script. En Python heeft een eigen installatiesysteem, waarmee je steeds de meest recentste stabiele versie kunt downloaden en installeren. Installeer het Python 3 installatiesysteem met de volgende opdracht:

dany@pindabook:~> sudo zypper install python3-pip
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
'python3-pip' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'python3-pip-10.0.1-lp151.2.2.noarch'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

Geen activiteit.

Zoals je merkt was het Python 3 installatiesysteem reeds op mijn openSUSE Leap 15.1 systeem aanwezig. Speedtest zelf installeer je met de opdracht:

dany@pindabook:~> sudo pip3 install speedtest-cli
Collecting speedtest-cli
  Downloading https://files.pythonhosted.org/packages/61/8b/58d1de9a7fff3e91c5ab956ab4ba72b49f42d9f73d5f3e248c740dfcc816/speedtest_cli-2.1.1-py2.py3-none-any.whl
Installing collected packages: speedtest-cli
Successfully installed speedtest-cli-2.1.1
You are using pip version 10.0.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

De installatie test je door de versie van de geïnstalleerde Speedtest op te vragen:

dany@pindabook:~> speedtest-cli --version
speedtest-cli 2.1.1
Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC]

Speedtest gebruiken

Om de snelheid van jouw internetverbinding te testen, voer je het speedtest-cli script zonder opties uit:

dany@pindabook:~> speedtest-cli
Retrieving speedtest.net configuration...
Testing from Skynet Belgium (109.130.59.0)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by EDPnet (Sint-Niklaas) [74.76 km]: 14.576 ms
Testing download speed................................................................................
Download: 90.20 Mbit/s
Testing upload speed......................................................................................................
Upload: 14.24 Mbit/s

Wil je de download- en uploadsnelheid in bytes/seconden, gebruik dan de optie --bytes:

dany@pindabook:~> speedtest-cli --bytes
Retrieving speedtest.net configuration...
Testing from Skynet Belgium (109.130.59.0)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by EDPnet (Sint-Niklaas) [74.76 km]: 12.044 ms
Testing download speed................................................................................
Download: 11.29 Mbyte/s
Testing upload speed......................................................................................................
Upload: 2.12 Mbyte/s

Resultaten in een afbeelding

Om het resultaat beter te presenteren (van opmaak voorzien) kan je deze in een PNG afbeelding opslaan, voeg daarvoor de optie --share toe:

dany@pindabook:~> speedtest-cli --share
Retrieving speedtest.net configuration...
Testing from Skynet Belgium (109.130.59.0)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by EDPnet (Sint-Niklaas) [74.76 km]: 12.059 ms
Testing download speed................................................................................
Download: 90.34 Mbit/s
Testing upload speed......................................................................................................
Upload: 15.42 Mbit/s
Share results: http://www.speedtest.net/result/8339357996.png

Let op het feit dat het resultaat op het internet openbaar wordt gedeeld, vandaar de optie --share.
Speedtest

Samengevatte resultaten

Een vereenvoudigde uitvoer met enkel de belangrijkste resultaten, verkrijg je met de optie --simple:

dany@pindabook:~> speedtest-cli --simple
Ping: 12.155 ms
Download: 90.22 Mbit/s
Upload: 15.79 Mbit/s

Merk op dat je tijdens de test geen aanwijzing (puntjes) ziet verschijnen dat de test bezig is. Wees dus geduldig en wacht op de beknopte resultaten.

Lijst meetservers

Om een op locatie gesorteerde lijst met meetservers weer te geven, gebruik je de optie --list:

dany@pindabook:~> speedtest-cli --list
Retrieving speedtest.net configuration...
 2951) ePlay TV (Roubaix, France) [27.61 km]
16913) Eurafibre (Lille, FR) [35.58 km]
 4010) LaFibre.info (Douai, France) [64.02 km]
11433) DELTA (Middelburg, Netherlands) [70.51 km]
 4320) EDPnet (Sint-Niklaas, Belgium) [74.76 km]
10915) Skylinq (Goes, Netherlands) [80.38 km]
12627) Proximus (Brussels, Belgium) [86.74 km]
 5151) Combell (Brussels, Belgium) [86.74 km]
 4319) Orange Belgium (Brussels, Belgium) [86.74 km]
21086) ASP (Brussels, Belgium) [86.74 km]
 2848) Cu.be Solutions (Diegem, Belgium) [92.21 km]
 2955) Nucleus BVBA (Antwerp, Belgium) [95.25 km]
 4812) Universite Catholique de Louvain (Louvain-La-Neuve, Belgium) [109.12 km]
 6554) WorldStream B.V. (Naaldwijk, Netherlands) [138.43 km]
21509) i3D.net (Rotterdam, Netherlands) [143.61 km]
21103) Damecon B.V. (Rotterdam, Netherlands) [143.68 km]
 1531) Cloud Space UK (Canterbury, Great Britain) [146.73 km]
25318) Inventive ERP Software b.v. (Rijswijk, Netherlands) [147.02 km]
 1208) Qweb | Full-Service Hosting (Alblasserdam, Netherlands) [147.28 km]
12066) KPN B.V. (Den Haag, Netherlands) [149.22 km]
20914) Host Sailor Ltd (Capelle, Netherlands) [153.71 km]
 3242) ColoCenter bv (Zoetermeer, Netherland) [156.07 km]
 ...
  960) Enternet Online Ltd (Tauranga, New Zealand) [18441.61 km]
 2025) PrimoWireless (New Plymouth, New Zealand) [18517.68 km]
 2857) REAP-ISP (Taupo, New Zealand) [18544.41 km]
  465) NOW (Napier, New Zealand) [18652.10 km]
 5907) Webconnect (Hastings, New Zealand) [18667.31 km]
 3797) Inspire Net Ltd (Palmerston North, New Zealand) [18702.23 km]
24716) Digital Cloud (Palmerston North, New Zealand) [18702.23 km]
10809) Lightspeed Technology Group (Queenstown, New Zealand) [18757.13 km]
 8356) Netspeed Data Limited (Wanaka, New Zealand) [18764.13 km]
11326) Spark New Zealand (Wellington, New Zealand) [18765.11 km]
 4954) Vodafone New Zealand (Wellington, New Zealand) [18765.11 km]
 4518) CityLink Ltd (Wellington, New Zealand) [18765.11 km]
 8699) ACSData (Wellington, New Zealand) [18765.11 km]
21611) Xtreme Networks (Wellington, New Zealand) [18765.11 km]
 2336) Amuri.net (Culverden, New Zealand) [18818.43 km]
14976) Yrless Ltd (Gore, New Zealand) [18842.73 km]
11328) Spark New Zealand (Christchurch, New Zealand) [18869.62 km]
 4934) Vodafone New Zealand (Christchurch, New Zealand) [18869.62 km]
 7317) Vocusgroup NZ (Christchurch, New Zealand) [18869.62 km]
  922) 2degrees (Christchurch, New Zealand) [18869.62 km]
 6056) 2degrees (Dunedin, New Zealand) [18927.65 km]
12037) Unifone NZ LTD (Dunedin, New Zealand) [18927.65 km]
 5482) WIC NZ Ltd (Dunedin, New Zealand) [18927.65 km]
Snelheidstest met alternatieve server

Wil je een verbinding naar bijvoorbeeld een ander land of continent meten dan kan je de internet bandbreedte via een meetserver in dit land of continent gebruiken:

dany@pindabook:~> speedtest-cli --server 3242
Retrieving speedtest.net configuration...
Testing from Skynet Belgium (109.130.59.0)...
Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by ColoCenter bv (Zoetermeer) [156.07 km]: 19.818 ms
Testing download speed................................................................................
Download: 89.64 Mbit/s
Testing upload speed......................................................................................................
Upload: 15.54 Mbit/s

De gemeten internet bandbreedte is niet alleen afhankelijk van de afstand, maar vooral van het aantal gepasseerde knooppunten en de bandbreedte van de bekabeling tussen de knooppunten. Zo zal de bandbreedte van een internetverbinding naar een ander continent lager zijn doordat de kabels tussen de continenten zwaarder belast zijn. Je kunt het vergelijken met een snelweg, waar heel veel verkeer over moet. Er ontstaan al snel files, die de snelheid drastisch omlaag kunnen halen.

En verder

Een overzicht van alle mogelijkheden van Speedtest, kan je opvragen met de opdracht:

dany@pindabook:~> speedtest-cli --help
usage: speedtest-cli [-h] [--no-download] [--no-upload] [--single] [--bytes]
                     [--share] [--simple] [--csv]
                     [--csv-delimiter CSV_DELIMITER] [--csv-header] [--json]
                     [--list] [--server SERVER] [--exclude EXCLUDE]
                     [--mini MINI] [--source SOURCE] [--timeout TIMEOUT]
                     [--secure] [--no-pre-allocate] [--version]

Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli

optional arguments:
  -h, --help            show this help message and exit
  --no-download         Do not perform download test
  --no-upload           Do not perform upload test
  --single              Only use a single connection instead of multiple. This
                        simulates a typical file transfer.
  --bytes               Display values in bytes instead of bits. Does not
                        affect the image generated by --share, nor output from
                        --json or --csv
  --share               Generate and provide a URL to the speedtest.net share
                        results image, not displayed with --csv
  --simple              Suppress verbose output, only show basic information
  --csv                 Suppress verbose output, only show basic information
                        in CSV format. Speeds listed in bit/s and not affected
                        by --bytes
  --csv-delimiter CSV_DELIMITER
                        Single character delimiter to use in CSV output.
                        Default ","
  --csv-header          Print CSV headers
  --json                Suppress verbose output, only show basic information
                        in JSON format. Speeds listed in bit/s and not
                        affected by --bytes
  --list                Display a list of speedtest.net servers sorted by
                        distance
  --server SERVER       Specify a server ID to test against. Can be supplied
                        multiple times
  --exclude EXCLUDE     Exclude a server from selection. Can be supplied
                        multiple times
  --mini MINI           URL of the Speedtest Mini server
  --source SOURCE       Source IP address to bind to
  --timeout TIMEOUT     HTTP timeout in seconds. Default 10
  --secure              Use HTTPS instead of HTTP when communicating with
                        speedtest.net operated servers
  --no-pre-allocate     Do not pre allocate upload data. Pre allocation is
                        enabled by default to improve upload performance. To
                        support systems with insufficient memory, use this
                        option to avoid a MemoryError
  --version             Show the version number and exit

Speedtest verwijderen

Handig aan het Python installatiesysteem is, dat je geïnstalleerde scripts ook eenvoudig terug kunt verwijderen:

dany@pindabook:~> sudo pip3 uninstall speedtest-cli
Uninstalling speedtest-cli-2.1.1:
  Would remove:
    /usr/bin/speedtest
    /usr/bin/speedtest-cli
    /usr/lib/python3.6/site-packages/speedtest.py
    /usr/lib/python3.6/site-packages/speedtest_cli-2.1.1.dist-info/*
    /usr/lib/python3.6/site-packages/speedtest_cli.py
Proceed (y/n)? y
  Successfully uninstalled speedtest-cli-2.1.1
You are using pip version 10.0.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Alternatieve installatieprocedures

Je kunt het Speedtest Python script ook op verschillende alternatieve manieren installeren. Je maakt dan echter geen gebruik van de officiële Python installatieprocedure. Elke installatieprocedure heeft voor- en nadelen.

Downloaden

Je kunt met een wget opdracht het Speedtest python script rechtstreeks van de github webpagina van de ontwikkelaar downloaden.

dany@pindabook:~> wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
--2019-06-14 11:34:29--  https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
Herleiden van raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.36.133
Verbinding maken met raw.githubusercontent.com (raw.githubusercontent.com)|151.101.36.133|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 63234 (62K) [text/plain]
Wordt opgeslagen als: ‘speedtest-cli’

speedtest-cli                100%[==============================================>]  61,75K  --.-KB/s    in 0,03s   

2019-06-14 11:34:30 (2,07 MB/s) - '‘speedtest-cli’' opgeslagen [63234/63234]

Na het downloaden moet je het gedownloade script uitvoerrechten geven met:

dany@pindabook:~> chmod +x speedtest-cli

Waardoor je het kunt starten (opdracht uitvoeren):

dany@pindabook:~> python3 speedtest-cli --version
speedtest-cli 2.1.1
Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC]

Zo krijg je meest recente versie van Speedtest. Dit is echter niet altijd een stabiele versie, neem dat de ontwikkelaar juist een nieuwe functies heeft toegevoegd of een stuk code heeft herschreven, maar deze nog niet grondig werd getest. Dan kan dit problemen veroorzaken. M.a.w. je werkt met de ontwikkelversie van het Speedtest script (beter bekend als Alpha en Beta versies). Soms is dit ook een voordeel. Stel je hebt een nieuwe recente distributie geïnstalleerd en de stabiele werkt niet, dan kan de ontwikkelaar al bezig zijn met het aanpassen van zijn script, waardoor de ontwikkelversie wel werkt. Denk aan de overstap van Python 2 naar Python 3.

Daar je enkel het script hebt gedownload, kan je Speedtest eenvoudig verwijderen door het gedownloade script te verwijderen:

dany@pindabook:~> rm speedtest-cli

Om een bestand (script) te downloaden, kan je i.p.v. wget ook gebruik maken van curl. De Speedtest installatie verloopt dan als volgt:

dany@pindabook:~> curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 63234  100 63234    0     0   411k      0 --:--:-- --:--:-- --:--:--  411k
dany@pindabook:~> chmod +x speedtest-cli
dany@pindabook:~> python3 speedtest-cli --version
speedtest-cli 2.1.1
Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC]
dany@pindabook:~> rm speedtest-cli

Meewerken aan de ontwikkeling

Veel ontwikkelaars werken met een versiebeheersysteem, waardoor je het volledige ontwikkelproces kunt downloaden en het project verder mee-ontwikkelen. Eerst installeer je indien nodig het versiebeheersysteem:

dany@pindabook:~> sudo zypper install git
[sudo] wachtwoord voor root: 
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
'git' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'git-2.16.4-lp151.3.4.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

Geen activiteit.

Daarna download je een exacte kopie (kloon) van het project waaraan je wilt meewerken of wilt aanpassen:

dany@pindabook:~> git clone https://github.com/sivel/speedtest-cli.git
Cloning into 'speedtest-cli'...
remote: Enumerating objects: 1150, done.
remote: Total 1150 (delta 0), reused 0 (delta 0), pack-reused 1150
Receiving objects: 100% (1150/1150), 310.06 KiB | 518.00 KiB/s, done.
Resolving deltas: 100% (684/684), done.

Open de map met de broncode van het Speedtest project:

dany@pindabook:~> cd speedtest-cli

Sommige ontwikkelaars zorgen voor een installatiescript waarmee je de software op de computer kunt installeren:

dany@pindabook:~/speedtest-cli> sudo python3 setup.py install
[sudo] wachtwoord voor root: 
running install
running bdist_egg
running egg_info
creating speedtest_cli.egg-info
writing speedtest_cli.egg-info/PKG-INFO
writing dependency_links to speedtest_cli.egg-info/dependency_links.txt
writing entry points to speedtest_cli.egg-info/entry_points.txt
writing top-level names to speedtest_cli.egg-info/top_level.txt
writing manifest file 'speedtest_cli.egg-info/SOURCES.txt'
reading manifest file 'speedtest_cli.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'speedtest_cli.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build
creating build/lib
copying speedtest.py -> build/lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
copying build/lib/speedtest.py -> build/bdist.linux-x86_64/egg
byte-compiling build/bdist.linux-x86_64/egg/speedtest.py to speedtest.cpython-36.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying speedtest_cli.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying speedtest_cli.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying speedtest_cli.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying speedtest_cli.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying speedtest_cli.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/speedtest_cli-2.1.1-py3.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing speedtest_cli-2.1.1-py3.6.egg
Copying speedtest_cli-2.1.1-py3.6.egg to /usr/lib/python3.6/site-packages
Adding speedtest-cli 2.1.1 to easy-install.pth file
Installing speedtest script to /usr/bin
Installing speedtest-cli script to /usr/bin

Installed /usr/lib/python3.6/site-packages/speedtest_cli-2.1.1-py3.6.egg
Processing dependencies for speedtest-cli==2.1.1
Finished processing dependencies for speedtest-cli==2.1.1
dany@pindabook:~/speedtest-cli> speedtest-cli --version
speedtest-cli 2.1.1
Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC]

De Speedtest ontwikkelaar heeft wel geen verwijderscript aangemaakt, waardoor het verwijderen van Speedtest moeilijker wordt. Maar ja, je bent bezig met de broncode van de ontwikkelversie van Speedtest. M.a.w. weet waar je aan begint.

Jouw computer bevat nu een exacte kopie van het project waaraan de ontwikkelaar zelf werkt. Waardoor je dezelfde mogelijkheden als de ontwikkelaar krijgt. Heb je iets mooi's toegevoegd of een bug (fout) verwijderd, dan kan je de verschillen met het oorspronkelijke project danzij het versiebeheersysteem terugsturen om het in het hoofdproject na goedkeuring te laten opnemen.