Auteur Sujet: Test de débit et de neutralité de l'Internet  (Lu 139240 fois)

0 Membres et 1 Invité sur ce sujet

ethernode

  • Abonné Orange Fibre
  • *
  • Messages: 27
  • Paris (75)
Test de débit et de neutralité de l'Internet
« Réponse #252 le: 23 septembre 2020 à 09:50:40 »
Je suis en train d'en écrire un en python, ce qui m'aiderait c'est l'existence d'un fichier JSON permettant de lister les hôtes, ports, protocoles, fichiers disponibles pour les tests. Ou encore plus simple, une doc: le .bat est assez peu lisible (no offense !).

De ce que j'ai compris en lisant https://github.com/ARCEP-dev/disPorts/blob/master/disPorts.bat il existe un fichier 1G.iso disponible sur les hôtes bouygues.testdebit.info k-net.testdebit.info ikoula.testdebit.info et scaleway.testdebit.info et on peut taper en http/https sur tous les ports de 1 à 9199 (même si la plupart des ports sont fermés); c'est bien ça ?

Il faudrait à mon sens idéalement ajouter des mires chez OVH et chez AWS.

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
Test de débit et de neutralité de l'Internet
« Réponse #253 le: 23 septembre 2020 à 10:02:59 »
Bien sur je peut aider. Tu me donnes la forme de ton fichier je le met en place.

Bouygues / Scaleway / K-Net : du port 1 au port 9199 en https excepté les ports 80/81 écoutent en http.

(en ce moment pour un besoin précis le port 80 du serveur K-Net est en https, mais il repassera en http à la fin du mois)

Ikoula : il y a les ports 8080, 8081, 8443 qui sont non disponibles, car utilisés par SpeedTest / nPerf.

Le fichier de 10 Go n'est disponible que sur les serveur en 10 Gb/s.

Si OVH me propose un serveur, ce sera avec plaisir.

ethernode

  • Abonné Orange Fibre
  • *
  • Messages: 27
  • Paris (75)
Test de débit et de neutralité de l'Internet
« Réponse #254 le: 23 septembre 2020 à 12:21:33 »
#!/usr/bin/env python3
import time
import signal
import subprocess
import sys
 
DOMAIN = 'testdebit.info'
SIZE_MB = 1000
 
cmd_template = 'curl -f -4 -o /dev/null {proto}://{host}:{port}/1G.iso'
 
protocols = ['http', 'https']
 
hosts = [
    'bouygues.testdebit.info',
    'k-net.testdebit.info',
    'ikoula.testdebit.info',
    'scaleway.testdebit.info',
]
 
ports = [53, 80, 443, 554, 843, 1935, 5060, 6881, 8080]
 
results = dict()
 
 
def cmd_took(cmd):
    before = time.time()
    print(cmd)
    status, output = subprocess.getstatusoutput(cmd)
    if status != 0:
        print(f'Cmd failed: {output}')
        return None
    took = time.time() - before
    return took
 
 
for proto in protocols:
    for host in hosts:
        for port in ports:
            cmd = cmd_template.format(**locals())
            took = cmd_took(cmd)
 
            if took is not None:
                bw = int(8 * SIZE_MB / took)
                test_id = f'{proto}_{host}_{port}'
                print(f'{test_id} bandwidth was {bw} Mbps')
                results[test_id] = bw
 
for key, val in results.items():
    print(f'{key}: {val} Mbps')
 
 
if __name__ == '__main__':
 
    def signal_handler(sig, frame):
        print('You pressed Ctrl+C!')
        sys.exit(0)
 
    signal.signal(signal.SIGINT, signal_handler)

vivien

  • Administrateur
  • *
  • Messages: 47 085
    • Twitter LaFibre.info
Test de débit et de neutralité de l'Internet
« Réponse #255 le: 23 septembre 2020 à 13:21:32 »
Je me suis mal exprimé.

Tu souhaiterais récupérer un fichier json sur https://testdebit.info/ qui listerais les différents hôtes, ports, protocoles, fichiers disponibles pour les tests.

Je veut bien un exemple et je pourrait ensuite mettre ce fichier à disposition et surtout le maintenir avec l'arrivée départ de nouveaux serveurs.

Maintenant certains ports peuvent avoir une bonne raison d'être limité en débit, cf Limitation de débit de certains opérateurs sur le port TCP 1723 (PPTP) ?

Maintenant, comme indiqué l'Arcep va lancer un outil grand public pour tester les débits des ports et permettre un signalement si il y a une différentiation / blocage (lien vers https://jalerte.arcep.fr/ ). Cet outil ne sera disponible que sous Android et iOS.

Ce qui pourrait être intéressant, c'est que ton outil soit cité dans le communiqué de presse de l'Arcep (je ne sais pas si c'est possible) vu qu'il est complémentaire pour permettre des tests sur des PC. Je pense qu'il faudrait qu'il se limite par défaut aux ports aux ports de l'outil qui va être lancé (on a fait attention de ne pas mettre de ports qui ont une bonne raison pour être limités comme le port 1723).

Je ne peut pas divulguer publiquement la liste des ports testés, mais je te propose de m'envoyer un mail à [remplacer par mon prenom].gueant@arcep.fr

Note: C'est ouvert, si d'autres que ethernode sont intéressés par développer un script ou outil qui tests les débit par ports pour mettre en avant bridage et priorisation, n'hésitez pas à me contacter.

Vivien.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Test de débit et de neutralité de l'Internet
« Réponse #256 le: 23 septembre 2020 à 14:31:49 »
c'est utile aussi pour NSpeed d'avoir quelque part une liste de cibles/mires.

J'avais un peu réfléchi a la question. Une solution immédiate et simple est effectivement une liste json ou csv quelque part.

Avec une autre solution a moyen terme, plus distribuée ou les serveurs s'annoncent par exemple. Peut-être a base d'enregistrements DNS SRV par exemple. A réfléchir plus, y'a peut-être des solutions existantes déjà (style annuaire de services ou d'url).

Concernant une liste json/csv.

si on regarde par exemple https://bouygues.testdebit.info et qu'on fait une liste simple, on arrive a une combinatoire élevée...

6 serveurs, 2 vIP,  9199 protocoles, 18 tailles, 86 types
Je vous laisse faire le calcul mais ca fera trop de lignes si on veut tout lister dans une liste simple.

Du coup il est mieux de plutôt sélectionner un sous-ensemble réduit pour automatiser des tests, façon ce qu'on a fait a l'époque pour la version Perl: https://github.com/LaFibre-info/neutrality-test/blob/master/tests.txt

ou partir sur un format plus structuré (avec champs et intervalles/listes de valeurs par champs).

ethernode

  • Abonné Orange Fibre
  • *
  • Messages: 27
  • Paris (75)
Test de débit et de neutralité de l'Internet
« Réponse #257 le: 23 septembre 2020 à 17:52:56 »
Je pensais à quelque chose qui teste tout et qui tolère les protocoles rejetés, par exemple

{
    "extensions": [
        "iso",
        "mp4"
    ],
    "files": [
        "10M.{extension}",
        "100M.{extension}"
    ],
    "hosts": [
        "bouygues.testdebit.info",
        "k-net.testdebit.info"
    ],
    "port_max": 9000,
    "port_min": 1,
    "protocols": [
        "http",
        "https"
    ]
}

Du coup un outil testerait tous les ports, protocoles etc même si l'hôte ne le gère pas, mais le fichier de config reste simple. Ensuite l'outil peut limiter / overrider certaines valeurs (ex: liste de ports)

ethernode

  • Abonné Orange Fibre
  • *
  • Messages: 27
  • Paris (75)
Test de débit et de neutralité de l'Internet
« Réponse #258 le: 27 septembre 2020 à 14:28:17 »
J'ai réécrit mon script en m'inspirant du .bat (pour ne télécharger que pendant 1 seconde); je l'ai réorienté "test de peering" (la neutralité c'est important certes, mais la majorité reste le traffic HTTPS), du coup une liste JSON de fichiers à télécharger serait très intéressante à mutualiser.

#!/usr/bin/env python3
import subprocess
from statistics import mean


def measure_bw(url):
    cmd = 'curl --fail --location --max-time 1 -4 -s --write-out "%{time_namelookup} %{time_connect} %{time_starttransfer} %{time_total} %{size_download}" -o /dev/null '
    cmd += url
    status, output = subprocess.getstatusoutput(cmd)
    time_namelookup, time_connect, time_starttransfer, time_total, size_download = [float(x.replace(',', '.')) for x in output.split()]
    took_transfer = time_total - time_starttransfer
    bandwidth_bytes_per_sec = size_download / took_transfer
    bandwidth_mbit_per_sec = bandwidth_bytes_per_sec * 8 / 1000000
    return bandwidth_mbit_per_sec


def measure_bw_average(url, runs=3):
    results = list()
    for i in range(runs):
        bw = measure_bw(url)
        if bw:
            results.append(bw)
    return mean(results)


test_files = {
    'bouygues': 'https://bouygues.testdebit.info/1G.iso',
    'k-net': 'https://k-net.testdebit.info/1G.iso',
    'ikoula': 'https://ikoula.testdebit.info/1G.iso',
    'scaleway': 'https://scaleway.testdebit.info/1G.iso',
    'ovh': 'http://www.ovh.net/files/1Gio.dat',
    'aws us-east-1': 'https://github.com/balena-io/etcher/releases/download/v1.5.109/balena-etcher-electron_1.5.109_amd64.deb',
}

results = dict()

for host, url in test_files.items():
    print(host, "%.1f Mbits/s" % measure_bw_average(url))

Depuis que je suis passé chez sosh (depuis Red), c'est beaucoup mieux chez ovh et ikoula (qui étaient 10 fois plus faibles)

$ python test.py
bouygues 298.8 Mbits/s
k-net 280.9 Mbits/s
ikoula 287.1 Mbits/s
scaleway 298.8 Mbits/s
ovh 295.3 Mbits/s
aws us-east-1 26.4 Mbits/s

underground78

  • Expert
  • Abonné Free fibre
  • *
  • Messages: 7 434
  • Orsay (91)
    • FreePON : suivi géographique du déploiement fibre EPON chez Free
Test de débit et de neutralité de l'Internet
« Réponse #259 le: 15 novembre 2020 à 20:07:37 »
Bonsoir,

Il me semble qu'il existe un serveur jumeau de bouygues.testdebit.info mais configuré en cubic à la place de BBR. En supposant que je n'ai pas inventé, est-ce que quelqu'un serait capable de me donner son URL parce que je n'arrive plus à la retrouver ?

Merci !