Auteur Sujet: HTTP/2 enfin disponible sur le forum  (Lu 4799 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 216
    • Twitter LaFibre.info
HTTP/2 enfin disponible sur le forum
« le: 10 mai 2022 à 14:04:59 »
Depuis ce matin, le forum est disponible en HTTP/2.



J'ai un peu honte, j'aurais dû l'activer avant. Cela devrait permettre de gagner un peu de temps de chargement.

Lorsqu’on utilise HTTP/1, les navigateurs effectuent une requête par ressource demandée (une page est constituée de nombreuses images). Ceci augmente le temps de chargement d’une page. HTTP/2 permet le multiplexage : le navigateur télécharge avec une seule requête toutes les ressources nécessaires à l’affichage de la page. HTTP/2 compresse les en-tête HTTP pour un gain de quelques dizaines d'octets par ressource.

N'hésitez pas à me signaler si vous voyez des régressions. Il y a peut-être les buffer qui sont un peu plus faible en HTTP/2 vs HTTP/1 (ou c'est le système qui les gères), il y aura peut être un petit tunning à faire.






Autre changement, uniquement dans les logs : Je log la version de TLS utilisée : TLSv1.2 ou TLS v1.3. (cf tutoriel pour Apache2)

L'objectif est de pouvoir mieux lutter contre des attaques applicatives, en désactivant si nécessaire TLSv1.2 pendant les attaques.

Tous les navigateurs supportent HTTP/3 (Firefox 63+, Chrome 70+, Edge 79+, Safari 14+) mais pas encore certains robots.

pitalugue

  • Abonné Free fibre
  • *
  • Messages: 542
HTTP/2 enfin disponible sur le forum
« Réponse #1 le: 10 mai 2022 à 14:29:53 »
Pour info, protocolairement, contrairement à ce que pourrait indiquer le schéma, la persistence des connexions existe déjà dans des versions antérieures d'HTTP. Fondamentalement, c'est la concommittence des réponses qui change ou leur livraison avant requête.

Optix

  • AS41114 - Expert OrneTHD
  • Abonné Orne THD
  • *
  • Messages: 4 677
  • WOOHOO !
    • OrneTHD
HTTP/2 enfin disponible sur le forum
« Réponse #2 le: 10 mai 2022 à 14:40:40 »
Le gros gain d'HTTP2, c'est surtout de pouvoir dire au serveur web : "écoute le gars m'a demandé telle page, tient voilà, et envoie lui tout de suite ces css et ces js".

Car là, si c'est le navigateur qui doit les demander, le gain est quasiment nul par rapport à HTTP1. Mais ça, je ne sais pas si SMF le gère.

M'enfin, c'est déjà une avancée :)

vivien

  • Administrateur
  • *
  • Messages: 47 216
    • Twitter LaFibre.info
HTTP/2 enfin disponible sur le forum
« Réponse #3 le: 10 mai 2022 à 16:58:36 »
Pour info, protocolairement, contrairement à ce que pourrait indiquer le schéma, la persistence des connexions existe déjà dans des versions antérieures d'HTTP. Fondamentalement, c'est la concommittence des réponses qui change ou leur livraison avant requête.

en HTTP/1.1 on ouvre habituellement plusieurs connexion TCP pour demander plusieurs éléments en // mais on n'ouvre pas autant de connexion que d'élément.

Autre schéma, qui met tout séquentiellement, ce qui est faux, vu qu'en http/1.1 il va mettre plusieurs connexions pour demander les éléments.

Bref je n'ai pas trouvé le schéma parfait.



Pas de server push avec SMF. Je ne sais pas qui l'utilise vraiment.

vivien

  • Administrateur
  • *
  • Messages: 47 216
    • Twitter LaFibre.info
HTTP/2 enfin disponible sur le forum
« Réponse #4 le: 10 mai 2022 à 19:43:57 »
Statistique du HTTP/2 comparé à la désactivation de TLS 1.0 et l'arrivée de TLS 1.3 et  sur Internet :


kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 092
  • Paris (75)
HTTP/2 enfin disponible sur le forum
« Réponse #5 le: 10 mai 2022 à 23:18:28 »
gj !

manque plus que HTTP/3 sur QUIC pour palier aux défauts de HTTP/2 ;)

Le gros gain d'HTTP2, c'est surtout de pouvoir dire au serveur web : "écoute le gars m'a demandé telle page, tient voilà, et envoie lui tout de suite ces css et ces js".

Car là, si c'est le navigateur qui doit les demander, le gain est quasiment nul par rapport à HTTP1. Mais ça, je ne sais pas si SMF le gère.

M'enfin, c'est déjà une avancée :)

heu le 'HTTP/2 push' a été quasi inutilisé en pratique. En 2020, Chrome a annoncé la fin de son support (quelques infos ici: https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/ et la feature ici: https://chromestatus.com/feature/6302414934114304 )

Le gros gain d'HTTP/2 c'est une session TCP par client la ou il en fallait plusieurs pour HTTP/1 et la priorisation. Quand on gère beaucoup de clients c'est tres impactant sur les serveurs et les frontaux web.
Mais c'est aussi un des défauts d'HTTP/2 car si la session TCP a des soucis tout les flux du multiplexage sont impacté. C'est ce qui a donné naissance a QUIC puis HTTP/3.

Par contre dans la plupart des implémentations HTTP/2 est souvent moins performant en débit brut que HTTP/1. Donc pour du téléchargement web par exemple on utilise souvent encore plutôt du HTTP/1 en attendant HTTP/3.

vivien

  • Administrateur
  • *
  • Messages: 47 216
    • Twitter LaFibre.info
HTTP/2 enfin disponible sur le forum
« Réponse #6 le: 11 mai 2022 à 07:22:57 »
Par contre dans la plupart des implémentations HTTP/2 est souvent moins performant en débit brut que HTTP/1. Donc pour du téléchargement web par exemple on utilise souvent encore plutôt du HTTP/1 en attendant HTTP/3.

C'est ce que je suis en train de vérifier en testant en local (PC directement connecté à un serveur situé à 30cm de lui) le débit HTTP/1 vs HTTP/2 avec Curl sur différentes latences.

Dans mon script perl (voir ci-dessous), je fais les requêtes sur "appliwave.testdebit.info", c'est pour avoir un certificat valide : j'ai récupéré le certificat de ce serveur et dans le fichier /etc/hosts, je fais pointer appliwave.testdebit.info vers 192.168.2.1, mon serveur local. Je suis donc en conditions parfaites (serveur dédié à mon test, client dédié à mon test et réseau parfait).

Je teste avec les latence +0ms, +1ms, +2ms, +4ms, +8ms, +16ms, +32ms, +64ms, +128ms, +256ms, +512ms, +1024ms
J'ai un problème pour mon script, il utilise tc pour rajouter de la latence : `sudo tc qdisc change dev $interface root netem delay 4ms`;

Le script est lancé avec l'utilisateur "vgu". COmme il faut les droits root (dans mon script j'utilise sudo), j'utilise visudo pour modifier /etc/sudoers, j'ai rajouté :
vgu     ALL=NOPASSWD: /usr/sbin/tcmais il demande toujours le mot de passe.

J'ai aussi testé pour qu'il ne demande de mot de passe pour aucune application, mais cela ne fonctionne pas :
vgu     ALL=NOPASSWD: ALL
Je veut bien la bonne ligne à rentrer dans visudo.

#!/usr/bin/perl -w
use strict;
use Switch;

###################### testdebit.pl ######################
# Script perl de test de débit descendant pour Linux version 1.1 du 14 mars 2021
# Écrit par Vivien GUEANT sous Licence publique générale GNUv3
# Débit affichés en Mb/s (1 Mb/s = 1 000 000 bits)
# Taille affichée en Mo (1 Mo = 1 000 000 octets)

###################### Dépendances à installer sous Ubuntu :
# sudo apt install curl libswitch-perl

############# INITIALISATION DES CHEMINS #################
my $LOGFILE_NAME = "/home/vgu/testdebit_log.csv";  # Fichier de log
my $UP_FILE_NAME = "/home/vgu/testdebit_upload.iso";  # Fichier pour l'upload
my $interface = "eno2"; # Interface réseau pour NetEm 1 Gb/s
#my $interface = "enp1s0"; # Interface réseau pour NetEm 10 Gb/s

###################### FONCTION CURL ######################
sub curl
{
# VARIABLES PASSEES EN ARGUMENT
my ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom) = @_;
my @CurlResult = "";

###################### GENERATION DE LA DATE ######################
my $time = localtime(time);
my $Annee = substr($time,length($time)-4);
my $Jour = substr($time,8,2);
if ($Jour < 10){ $Jour = "0".substr($Jour,1); }
my $Mois = substr($time,4,3);
switch ("$Mois") {
case "Jan" { $Mois = "01"; }
case "Feb" { $Mois = "02"; }
case "Mar" { $Mois = "03"; }
case "Apr" { $Mois = "04"; }
case "May" { $Mois = "05"; }
case "Jun" { $Mois = "06"; }
case "Jul" { $Mois = "07"; }
case "Aug" { $Mois = "08"; }
case "Sep" { $Mois = "09"; }
case "Oct" { $Mois = "10"; }
case "Nov" { $Mois = "11"; }
case "Dec" { $Mois = "12"; }
}
my $Heure = substr($time,length($time)-13,8); # Calcul de l'heure avec les minutes et les secondes
my $DateHeure = $Annee."-".$Mois."-".$Jour." ".$Heure; # DateHeure pour MySQL
#my $Date = $Annee."-".$Mois."-".$Jour; # Date pour MySQL
my $Date = $Jour."/".$Mois."/".$Annee; # Date pour fichier CSV
$Heure = substr($time,length($time)-13,2); # Calcul de l'heure sans les minutes, ni les secondes
my $DateHeure0000 = $Annee."-".$Mois."-".$Jour." ".$Heure.":00:00"; # DateHeure sans les minutes, ni les secondes pour faciliter les grpahes

###################### GENERATION DE LA PERIODE DE TEST (0=err 1=HeureNuit, 2=HeureCreuse, 3=HeurePleine) ######################
my $BH = "0";
switch ("$Heure") {
case "00" { $BH = "1"; }
case "01" { $BH = "1"; }
case "02" { $BH = "1"; }
case "03" { $BH = "1"; }
case "04" { $BH = "1"; }
case "05" { $BH = "1"; }
case "06" { $BH = "1"; }
case "07" { $BH = "2"; }
case "08" { $BH = "2"; }
case "09" { $BH = "2"; }
case [10..17] { $BH = "2"; }
case [18..22] { $BH = "3"; }
case "23" { $BH = "2"; }
}

###################### GENERATION DE LA PERIODE DE TEST (0=err 1=Semaine, 2=WeekEnd) ######################
my $WeekEnd = substr($time,0,3);
switch ("$WeekEnd") {
case "Mon" { $WeekEnd = "1"; }
case "Tue" { $WeekEnd = "1"; }
case "Wed" { $WeekEnd = "1"; }
case "Thu" { $WeekEnd = "1"; }
case "Fri" { $WeekEnd = "1"; }
case "Sat" { $WeekEnd = "2"; }
case "Sun" { $WeekEnd = "2"; }
else { $WeekEnd = "0"; }
}

###################### Téléchargement CURL ######################
if("$type_test" eq "download") {
print ("Fichier en cours de téléchargement : $serveur_url\n");
@CurlResult = `curl -$serveur_proto $serveur_http -s -w %{speed_download}-%{time_namelookup}-%{time_connect}-%{time_starttransfer}-%{time_total}-%{size_download}-%{remote_ip} -o /dev/null "$serveur_url"`;
}

if("$type_test" eq "upload") {
print ("Fichier en cours d'upload : $UP_FILE_NAME vers $serveur_url\n");
@CurlResult = `curl -$serveur_proto $serveur_http -s -w %{speed_upload}-%{time_namelookup}-%{time_connect}-%{time_starttransfer}-%{time_total}-%{size_upload}-%{remote_ip} -F filecontent=@"$UP_FILE_NAME" -o /dev/null "$serveur_url"`;
}

###################### Post-traitelment données brut CURL ######################

my @CurlData = split(/-/, $CurlResult[0]);

##### speed_download / speed_upload
$CurlData[0] =~ s/,/\./; # remplacer la 1ère virgule par un point
my $debit_tout_inclus = 8 * $CurlData[0] /1000000;

##### DNS time_namelookup
$CurlData[1] =~ s/,/\./; # remplacer la 1ère virgule par un point
my $dns = 1000 * $CurlData[1];

##### time_connect (inclus : DNS)
$CurlData[2] =~ s/,/\./; # remplacer la 1ère virgule par un point
my $dns_time_connect = 1000 * $CurlData[2];

##### time_starttransfer (inclus : DNS + time_connect)
$CurlData[3] =~ s/,/\./; # remplacer la 1ère virgule par un point
my $dns_ping_start = 1000 * $CurlData[3];

##### time_total (inclus : DNS + time_connect + time_starttransfer)
$CurlData[4] =~ s/,/\./; # remplacer la 1ère virgule par un point
my $time_total = 1000 * $CurlData[4];

##### size_download / size_upload
my $taille = $CurlData[5] /1000000;

##### remote_ip
my $remote_ip = $CurlData[6];

##### calculs
my $ping_tcp = $dns_time_connect - $dns;
my $start_transfer = $dns_ping_start - $dns_time_connect;
my $temps_transfert = $time_total - $dns_ping_start;

###################### Si division par 0, on quitte proprement ######################
if ("$temps_transfert" eq "0") {
print "Erreur de division par 0: temps_transfert=0 obtenu par time_total=$time_total - dns_ping_start=$dns_ping_start\n";
print LOG ("$DateHeure;$Date;$Heure;$BH;$WeekEnd;$DateHeure0000;$serveur_nom;$type_test;$taille;IPv$serveur_proto;0;$debit_tout_inclus;$dns;$ping_tcp;$start_transfer;$dns_ping_start;$temps_transfert;$remote_ip\n");
}
else {
my $debit_utile = 8000 * $taille / $temps_transfert;

###################### Sortie vers le fichier CSV ######################
print LOG ("$DateHeure;$Date;$Heure;$BH;$WeekEnd;$DateHeure0000;$serveur_nom;$type_test;$taille;IPv$serveur_proto;$debit_utile;$debit_tout_inclus;$dns;$ping_tcp;$start_transfer;$dns_ping_start;$temps_transfert;$remote_ip\n");
###################### Sortie au format texte ######################
print ("#####################################################################################\n");
print ("###################### Résultats du test du $Date à $Heure heure\n");
print ("###################### Transfert $type_test d'un fichier de $taille Mo en IPv$serveur_proto\n");
print ("#####################################################################################\n");
print ("Nom                                : $serveur_nom\n");
print ("Débit moyen utile (DNS + SYN exclu): $debit_utile Mb/s\n");
print ("Débit moyen réel  (temps1+t2+t3+t4): $debit_tout_inclus Mb/s\n");
print ("Temps1: résolution DNS             : $dns ms\n");
print ("Temps2: connexion [SYN]+[SYN ACK]  : $ping_tcp ms\n");
print ("Temps3: entre [SYN ACK] et 1er paq : $start_transfer ms\n");
print ("Somme de Temps1 + Temps2 + Temps3  : $dns_ping_start ms\n");
print ("Temps4: temps de transfert utile   : $temps_transfert ms\n");
print ("Taille utile transférée            : $taille Mo\n");
print ("Remote IP                          : $remote_ip\n");
print ("Date et heure                      : $DateHeure\n");
print ("#####################################################################################\n\n");
}
}

########################################################################
########################## DEBUT DU PROGRAMME ##########################
########################################################################

############# INITIALISATION DES VARIABLES #################
my $type_test ="0"; # download ou upload
my $serveur_proto = "0"; ## 4 pour IPv4 ou 6 pour IPv6
my $serveur_http = "0"; ## --http1.1 ou --http2
my $serveur_url = "0";   ## Url du serveur avec http:// ou https://
my $serveur_nom = "0";   ## Nom du serveur

###################### Sleep aléatoire de 3 minutes (180 secondes) avant le lancement ######################
#my $random = int(rand(180)) + 1;
#print ("Pause de $random secondes\n");
#`/bin/sleep $random`;

# Initialisation NetEm
`sudo tc qdisc add dev $interface root netem delay 0ms`;

############# OUVERTURE DU FICHIER DE LOG CSV #################
open(LOG, ">>$LOGFILE_NAME") || die "===> Kill : Impossible d'ouvrir le fichier de log $LOGFILE_NAME";


###########################################################
########################## TESTS ##########################
###########################################################

############# Tests Download IPv4
$type_test = "download";
$serveur_proto = "4";


`sudo tc qdisc change dev $interface root netem delay 0ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-0ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-0ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 1ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-1ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-1ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 2ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-2ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-2ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);

`sudo tc qdisc change dev $interface root netem delay 4ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-4ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-4ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 8ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-8ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-8ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 16ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-16ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-16ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 32ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-32ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-32ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 64ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-64ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-64ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 128ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-128ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-128ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 256ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-256ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-256ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 512ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-512ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-512ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);


`sudo tc qdisc change dev $interface root netem delay 1024ms`;
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-1024ms-http1";
$serveur_http = "--max-time 10 --http1.1";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#############
`/bin/sleep 1`;
$serveur_nom = "cubic-perte10-1024ms-http2";
$serveur_http = "--max-time 10 --http2";
$serveur_url = "https://appliwave.testdebit.info/250Mi.iso";
curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);




############# Initialisation des tests d'Upload #############
if (-e "$UP_FILE_NAME") {
# Le fichier à uploader existe
}
else {
print ("Fichier upload $UP_FILE_NAME absent => Téléchargement\n");
`curl -o "$UP_FILE_NAME" "https://appliwave.testdebit.info/250Mi.iso"`
}

############# Tests Upload IPv4
$type_test = "upload";
$serveur_proto = "4";

#############
$serveur_nom = "Bouygues BBR";
$serveur_url = "https://paris.testdebit.info/dl/262144000.iso";
#curl ($type_test, $serveur_proto, $serveur_http, $serveur_url, $serveur_nom);
#`/bin/sleep 20`;


############# Fermeture du fichier de log et supression du fichier #############
close LOG || die "===> Kill (à la fin du programme) : Problème à la fermeture du fichier de log $LOGFILE_NAME : $!";

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
HTTP/2 enfin disponible sur le forum
« Réponse #7 le: 11 mai 2022 à 09:44:41 »
Je veut bien la bonne ligne à rentrer dans visudo
Il manque des espaces à priori :
vgu ALL = NOPASSWD: /usr/sbin/tc
Au lieu de modifier le /etc/hosts, tu peux simplement utiliser un argument de curl :
--resolve=appliwave.testdebit.info:443:127.0.0.1

Anonyme

  • Invité
HTTP/2 enfin disponible sur le forum
« Réponse #8 le: 11 mai 2022 à 10:02:02 »
Cela peux pas t'aider ?


    SETUID

Ce premier « droit » spécial ne s’applique qu’à des fichiers et pas des répertoires. Son utilisation est la plus simple à appréhender. Il faut d’abord comprendre le fait que quand un utilisateur exécute un script ou un lance un binaire quelconque, celui-ci se lance avec les droits de cet utilisateur. Par conséquent, et en fonction de ce que le script fait, il se peut que certaines actions ne soient pas permises avec le niveau de droits de l’utilisateur (par exemple écrire dans des fichiers appartenant à root). L’exemple le plus courant est l’utilisation de la commande passwd. Lorsqu’on souhaite changer son mot de passe, c’est cette commande qu’on utilise. Mais pour que le changement de mot de passe soit effectif, il faut que passwd puisse écrire dans les fichiers. /etc/passwd et /etc/shadow. Problème, en tant qu’utilisateur nous n’avons pas le droit d’écrire dans ces fichiers. C’est là que SETUID entre en action. On dit alors que passwd est « setuidé » Celà veut dire que passwd est lancé avec les droits de root et du coup en tant qu’utilisateur l’écriture dans les fichiers précédemment cités est donc possible. Voici comment apparaît le SETUID :

-rwsr-xr-x 1 root root 59640 Sep 27 2017 /usr/bin/passwd*

Notez le s à la place du x pour le groupe de permissions du propriétaire (ici root). Sa valeur octale est 4. Les droits de passwd sont donc 4755 "

vivien

  • Administrateur
  • *
  • Messages: 47 216
    • Twitter LaFibre.info
HTTP/2 enfin disponible sur le forum
« Réponse #9 le: 11 mai 2022 à 16:26:03 »
Là ce n'est pas l’accès à un fichier, mais à tc pour rajouter de la latence et des pertes de paquets.

visudo semble la solution adaptée.

Il manque des espaces à priori :
non, cela ne fonctionne pas même avec des espaces : il me demande mon mot de passe.

Anonyme

  • Invité
HTTP/2 enfin disponible sur le forum
« Réponse #10 le: 11 mai 2022 à 16:54:23 »
SETUID :
-rwsr-xr-x 1 root root 59640 Sep 27 2017 /usr/bin/passwd*
Si tu veux.

tc c'est pas un fichier ?

[edit]
Je te dis cela, j'ai pas essayé, mais si tu fais une copie de tc dans un path /usr/local/sbin et que tu ne fais un appel relatif, en changeant les attributs de tc, j'ai le sentiment que cela devrait fonctionner.
[/edit]

pju91

  • Abonné Free fibre
  • *
  • Messages: 844
  • 91
HTTP/2 enfin disponible sur le forum
« Réponse #11 le: 11 mai 2022 à 17:38:55 »
Le script est lancé avec l'utilisateur "vgu". COmme il faut les droits root (dans mon script j'utilise sudo), j'utilise visudo pour modifier /etc/sudoers, j'ai rajouté :
vgu     ALL=NOPASSWD: /usr/sbin/tcmais il demande toujours le mot de passe.

J'ai aussi testé pour qu'il ne demande de mot de passe pour aucune application, mais cela ne fonctionne pas :
vgu     ALL=NOPASSWD: ALL
Je veut bien la bonne ligne à rentrer dans visudo.
Pour ton 2e exemple, la ligne que j'utilise bêtement (en la recopiant d'une machine à l'autre) depuis des années est :
pju ALL=(ALL) NOPASSWD:ALL
Pour ton cas, je la transformerais en quelque chose comme :
vgu ALL=(ALL) NOPASSWD: /usr/sbin/tc
Si ça ne marche pas, RTFM : man 5 sudoers et tu regardes la grammaire EBNF ...