Script bash pour lancer iperf3 sur plusieurs ports

Tags: #<Tag:0x00007fb42ac7b330> #<Tag:0x00007fb42ac79a58>

Hello à toutes et tous,
Avant de commencer, joyeuses pâques :slight_smile:

Cette fois-ci j’essaie de faire un script bash pour lancer iperf3 en mode client.
Et de pouvoir basculer sur un autre port si celui utilisé est occupé ou renvoie un erreur.

#!/bin/bash
if iperf3 -c bouygues.iperf.fr -4 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
	echo "test debit termine"
else
	if iperf3 -c bouygues.iperf.fr -4 -p 5202 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
		echo "test debit termine"
	else
		if iperf3 -c bouygues.iperf.fr -4 -p 5203 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
			echo "test debit termine"
		else
			if iperf3 -c bouygues.iperf.fr -4 -p 5204 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
				echo "test debit termine"
			else
				if iperf3 -c bouygues.iperf.fr -4 -p 5205 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
					echo "test debit termine"
				else
					if iperf3 -c bouygues.iperf.fr -4 -p 5206 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
						echo "test debit termine"
					else
						if iperf3 -c bouygues.iperf.fr -4 -p 5207 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
							echo "test debit termine"
						else
							if iperf3 -c bouygues.iperf.fr -4 -p 5208 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
								echo "test debit termine"
							else
								if iperf3 -c bouygues.iperf.fr -4 -p 5209 | grep 0.00-10.00 | tr -s ' ' | cut -d ' ' -f 5 >>/diagbox/web/tmp/iperf_upload.txt;then
									echo "test debit termine"
								else
									echo "echec test débit sur tous les ports(5201 a 5209)"
								fi
							fi
						fi
					fi
				fi
			fi
		fi
	fi
fi 

Les erreurs souvent retournés par iperf sont

  • “iperf3: error - unable to receive control message: Connection reset by peer”
    ou encore quand le port est déjà utilisé
  • iperf3: error - the server is busy running a test. try again later

Mon but final est d’écrire dans un fichier texte soit les valeurs du débit, soit le message erreur retourné.

Bonjour domoticity

Un script bash qui balaye les ports 5202 à 5209 :
EDIT : script corrigé

for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -p $port | \
  awk -v msgPort="Port $port =>" '
      {
      if ($2 == "error")
          print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt";
      else if ($0 ~ "0\.00-10\.00")
          print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
      }'
done

dont l’exécution donne le fichier /diagbox/web/tmp/iperf_upload.txt
dont le contenu est le suivant :

michel@debtxt00:~$ cat /diagbox/web/tmp/iperf_upload.txt 
Port 5202 => 23.0 Mbits/sec sender
Port 5202 => 22.4 Mbits/sec receiver
Port 5203 => 23.0 Mbits/sec sender
Port 5203 => 22.4 Mbits/sec receiver
Port 5204 => 23.1 Mbits/sec sender
Port 5204 => 22.4 Mbits/sec receiver
Port 5205 => 23.0 Mbits/sec sender
Port 5205 => 22.4 Mbits/sec receiver
Port 5208 => 23.0 Mbits/sec sender
Port 5208 => 22.4 Mbits/sec receiver
Port 5209 => 23.0 Mbits/sec sender
Port 5209 => 22.4 Mbits/sec receiver
michel@debtxt00:~$

et le fichier /diagbox/web/tmp/erreursIperf_upload.txt
dont le contenu est le suivant :

michel@debtxt00:~$ cat /diagbox/web/tmp/erreursIperf_upload.txt 
Port 5206 => iperf3: error - unable to receive control message: Connection reset by peer"
Port 5207 => iperf3: error - the server is busy running a test. try again later
michel@debtxt00:~$ 

Hello
Merci pour ta réponse.
J’ai essayé d’adapter ton code :

#!/bin/bash
#Tester la connexion internet
sudo ping 8.8.8.8 -c2 -q
if [ $? != 1 ]; then
	echo "ok" >> /diagbox/web/tmp/ping.txt
else
	echo "nok" >> /diagbox/web/tmp/ping.txt
	exit
fi
#Test debit upload
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -p $port | \
  awk -v msgPort="Port $port =>" '
      {
      if ("$2" == "error")
          print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt";
      else if ("$0" ~ "0\.00-10\.00")
          print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
      }'
done
#Test debit download
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -R -p $port | \
  awk -v msgPort="Port $port =>" '
      {
      if ("$2" == "error")
          print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_download.txt";
      else if ("$0" ~ "0\.00-10\.00")
          print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_download.txt"
      }'
done

Quand je lance le script : bash /CHEMIN DU SCRIPT :

root@diagbox:/diagbox/scripts_sh# bash iperf_bouygues.sh
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 18.218/18.227/18.237/0.135 ms
iperf3: error - the server is busy running a test. try again later
iperf3: error - the server is busy running a test. try again later

Mais après pas de fichiers créés rapportant les résultats et erreurs.
Le dossier où devraient arriver les deux fichiers est bien en chmod 777.
Peux tu me dire si j’ai fait une erreur dans le code s’il te plait :slight_smile:

Tu n’as fait aucune erreur,
c’est un grand imbécile (que je connais bien : c’est moi :slight_smile: ) qui a trouvé très malin de rajouter des guillemets
là où il ne fallait pas après avoir fait le copié/collé du script. Crois moi qu’il va m’entendre celui là :angry: :laughing:


Voilà le même script, mais cette fois, sans les guillemets qui étaient en trop :

for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -p $port | \
  awk -v msgPort="Port $port =>" '
      {
      if ($2 == "error")
          print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt"
      else if ($0 ~ "0\.00-10\.00")
          print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
      }'
done

Hello
Merci ton code fonctionne et c’est super rpatique :slight_smile:
Je vais encore t’embeter un peu :slight_smile:
Le script met envrion 2min40 pour s’éxécuter entièrement car il scanne tous les ports de 5202 a 5209.
C’et un temps plus que raisonnable quand on voit q’il teste le débit montant et descendant sur 8 ports différents.

Mais pourrais tu m’aider à le modifier pour faire ceci :
Dès qu’il a réussi a faire un test de débit sans message d’erreur il stoppe le script sans continuer sur les autres ports.
Merci encore pour ton aide.

Bonjour

Peut-être comme ça :

#!/bin/bash

for port in 520{2..9}; do
  continue=$(iperf3 -c bouygues.iperf.fr -4 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
        if ($2 == "error")
            print msgPort, $0               >> "/diagbox/web/tmp/erreursIperf_upload.txt"
        else if ($0 ~ "0\.00-10\.00")
             {
                 print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
                 print "stop ici."
             }
    }')
  if [ "$continue" != "" ]; then
      break
  fi
done

mille merci ça fonctionne.
Maintenant je vais eplucher ton code pour le comprendre lol
merci encore encore

Il y a mieux :

#!/bin/bash

for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt"
    else if ($0 ~ "0\.00-10\.00")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done

Pour essayer de t’aider :

Il y a la liste des valeurs qui est donnée par une syntaxe utilisée par bash
que l’on pourrait afficher avec une seule ligne de commande
comme celle qui suit :
echo 520{2..9}

ou comme celle là :
echo 52{02..09}

ou comme celle là :
echo 5{202..209}

ou comme celle là :
echo {5202..5209}


Ensuite il y a une boucle qui déclare une variable que j’ai nommée port
et qui assigne à chaque tour de boucle une des valeurs de la liste,
et qui fait avec cette variable ce qui est entre do et done

comme par exemple :

for port in 520{2..9}; do
    echo $port
done

Ce qui se traduit par : pour chaque valeur de la liste 520{2..9}
assigne cette valeur à la variable port
et fait l’action que je donne entre do et done
qui est dans l’exemple ci-dessus
echo $port
affiche la valeur de la variable port


Ensuite, il y a l’utilisation d’un pipe (le caractère |)
qui permet de connecter la sortie d’une commande vers l’entrée d’une autre commande.

Là, j’ai connecté la sortie de la commande iperf3 à l’entrée de la commande awk

Mais pour des raison d’esthétique, j’ai préféré mettre ça sur deux lignes,
et pour ça, j’ai utilisé le caractère d’échappement \ en fin de ligne
ce qui fait que le retour à la ligne est ignoré lors de l’exécution du script.

Donc, plutôt que d’écrire

iperf3 -c bouygues.iperf.fr -4 -p $port | awk -v msgPort="Port $port =>" ' ………………`

J’ai préféré écrire :

iperf3 -c bouygues.iperf.fr -4 -p $port | \
awk -v msgPort="Port $port =>" ' ………………

Dans awk je commence par définir une variable (que je vais utiliser dans les commandes awk)
et que j’ai nommée :
msgPort
à laquelle j’assigne, comme valeur, la chaîne de caractère
Port $port =>


Ensuite, awk va tester deux conditions qui, si elles sont remplies
renverront une ligne extraite vers un fichier spécifique.


La première condition est :
($2 == "error")
ce qui veut dire : si le 2ème champ de la ligne lue est
error
et si cette condition est remplie, j’envoie la valeur de ma variable
msgPort
suivie par la ligne qui a remplit cette condition à ajouter dans le fichier
/diagbox/web/tmp/erreursIperf_upload.txt


La deuxième condition ($0 ~ "0\.00-10\.00")
permet de n’extraire que les lignes dans lesquelles on pourra trouver
la suite de caractères 0.00-10.00
et si cette condition est remplie, j’envoie la valeur de ma variable msgPort
suivie du 7ème, 8ème et dernier champ de la ligne qui a remplit cette condition,
à ajouter dans le fichier /diagbox/web/tmp/iperf_upload.txt


La variable (interne à bash) nommée PIPESTATUS est un tableau
qui permet de récupérer les codes d’erreur que les commandes “pipées” ont généré.

Le code d’erreur de la commande iperf3 sera récupéré dans le 1er élément de ce tableau
et le code d’erreur de la commande awk sera récupéré dans le 2ème élément de ce tableau.

Quand l’exécution de la commande iperf3 s’est déroulée sans problème,
elle retourne un code d’erreur égal à 0

[[ ${PIPESTATUS[0]} == 0 ]]
permet de tester si le 1er élément du tableau PIPESTATUS est bien égal à 0
(un code d’erreur égal à 0 indique que la commande s’est exécutée sans provoquer d’erreur)

[[ ${PIPESTATUS[0]} == 0 ]] && break
et si ce test est positif, la commande break sera alors exécutée,
ce qui entraînera une sortie de la boucle for
et donc la fin de l’exécution de ce script.

1 J'aime

Hello, encore moi.
tout d’abord je suis désolé je ne t’ai pas remercié pour tes explications très claires.
Va falloir que j’achète des bouquins du style " les scripts bash pour les nuls :stuck_out_tongue:"

J’aurais encore besoin de tes lumières si tu me le permets :slight_smile:

alors mon but est le suivant :slight_smile:

Faire un test de débit derrière un ONT ( terminal optique) en utilisant ma carte asus tinkerboard en place de la Livebox.

J’ai réussi à créer la connexion en dhcp

quand je fais ces commandes :

iperf3 -c bouygues.iperf.fr -4 -O 10 -t 20 -p 5203  > > /diagbox/web/tmp/upload.tx
  iperf3 -c bouygues.iperf.fr -4 -O 10 -t 20 -R -p 5203  > > /diagbox/web/tmp/download.tx

J’obtiens les résultats voulus.

J’ai essayé de l’intégrer dans le scripts que tu m’as fait :

#!/bin/bash
#Effacer les fichier tempo si presents
if [ -f "/diagbox/web/tmp/dhclient.conf" ];then
	echo "Le fichier de configuration existe !";
	if sudo rm /diagbox/web/tmp/dhclient.conf; then
		echo "fichier dhclient efface"	
	else
		echo "Echec suppression tempo dhclient deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/iperf_upload.txt" ];then
	echo "Le fichier de iperf upload existe !";
	if sudo rm /diagbox/web/tmp/iperf_upload.txt; then
		echo "fichier iperf upload efface"	
	else
		echo "Echec suppression tempo iperf upload deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/iperf_download.txt" ];then
	echo "Le fichier de iperf download existe !";
	if sudo rm /diagbox/web/tmp/iperf_download.txt; then
		echo "fichier iperf download efface"	
	else
		echo "Echec suppression tempo iperf download deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/error.log" ];then
	echo "Le fichier log erreur existe !";
	if sudo rm /diagbox/web/tmp/error.log; then
		echo "fichier log erreur efface"	
	else
		echo "Echec suppressionfichier log deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

#fti conversion
USERNAME=$1
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f
for (( i=0; i<${#USERNAME}; i++ )); do
  HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs)
  AUTHSTRING=${AUTHSTRING}:${HEXCHAR}
done
echo ${AUTHSTRING} 

#Fichier dhclient
#Ecriture
echo 'option rfc3118-authentication code 90 = string;' >> /diagbox/web/tmp/dhclient.conf
echo "interface \"orange\" {" >> /diagbox/web/tmp/dhclient.conf
echo "send vendor-class-identifier \"sagem\";" >> /diagbox/web/tmp/dhclient.conf
echo "send user-class \"+FSVDSL_livebox.Internet.softathome.Livebox3\";" >> /diagbox/web/tmp/dhclient.conf
echo "send rfc3118-authentication ${AUTHSTRING} ;" >> /diagbox/web/tmp/dhclient.conf
echo 'request subnet-mask, routers,' >> /diagbox/web/tmp/dhclient.conf
echo 'domain-name, broadcast-address, dhcp-lease-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'dhcp-renewal-time, dhcp-rebinding-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'rfc3118-authentication;' >> /diagbox/web/tmp/dhclient.conf
echo 'supersede domain-name-servers 8.8.8.8, 8.8.4.4;' >> /diagbox/web/tmp/dhclient.conf
echo '}' >> /diagbox/web/tmp/dhclient.conf


#Deplacement
if sudo cp /diagbox/web/tmp/dhclient.conf /etc/dhcp/dhclient.conf; then
	echo 'fichier dhclient modifie';
else
	echo "Echec déplacement fichier dhclient" >> /diagbox/web/tmp/error.log
	exit
fi

#iptables
if sudo cp /etc/iptables.ipv4.nat.backup_rescue_dhcp /etc/iptables.ipv4.nat; then
	echo 'fichier iptables modifié';
else
	echo "Echec déplacement fichier iptables" >> /diagbox/web/tmp/error.log
	exit
fi
sudo iptables-restore < /etc/iptables.ipv4.nat

#Modification interfaces eth0
if sudo ifdown eth0; then
	echo 'arret eth0';
else
	echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
	exit
fi

if sudo cp /etc/network/interfaces_RESCUE_DHCP /etc/network/interfaces; then
	echo 'configuration interfaces modifié';
else
	echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
	exit
fi

if sudo ifup -a; then
	echo 'activation interfaces';
else
	echo "Echec activation interfaces" >> /diagbox/web/tmp/error.log
	exit
fi

for i in 0 1 2 3 4 5 6 7; do
## on définit pour chaque file une priorité
    if vconfig set_egress_map orange $i $i >/dev/null; then
		echo "definition priorité ok"
	else
		echo "definition priorité ko"
	fi
done
	if vconfig set_egress_map orange 1 0 >/dev/null; then
		echo " priorité 1 ok"
	else
		echo " priorité 1 ko"
	fi
	if vconfig set_egress_map orange 0 6 >/dev/null; then
		echo " priorité 2 ok"
	else
		echo " priorité 2 ko"
	fi
  
iptables -t mangle -A POSTROUTING -o orange -j CLASSIFY --set-class 0000:0001  
iptables -t mangle -A POSTROUTING -o orange -p igmp -j CLASSIFY --set-class 0000:0006
iptables -t mangle -A POSTROUTING -o orange -p icmp -j CLASSIFY --set-class 0000:0006 
iptables -t mangle -A POSTROUTING -o orange -m dscp --dscp 0x2e -j CLASSIFY --set-class 0000:0005
iptables -t mangle -A POSTROUTING -o orange -p udp --dport 67 -j CLASSIFY --set-class 0000:0006

sleep 10
#Test 8 pings
sudo ping 8.8.8.8 -c2 -q
if [ $? != 1 ]; then
	echo "connexion derrière ont opérationnel" 
	#test débit
#test débit
	for port in 520{2..9}; do
  continue=$(nice --20 iperf3 -c bouygues.iperf.fr -4 -O 10 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
        if ($2 == "error")
            print msgPort, $0               >> "/diagbox/web/tmp/erreursIperf_upload.txt"
        else if ($0 ~ "0\.00-10\.00")
             {
                 print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
                 print "stop ici."
             }
    }')
    if [ "$continue" != "" ]; then
        break
    fi
done
#Download
for port in 520{2..9}; do
  continue=$(nice --20 iperf3 -c bouygues.iperf.fr -4 -O 10 -R -p $port | \
  awk -v msgPort="Port $port =>" '
    {
        if ($2 == "error")
            print msgPort, $0               >> "/diagbox/web/tmp/erreursIperf_download.txt"
        else if ($0 ~ "0\.00-10\.00")
             {
                 print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_download.txt"
                 print "stop ici."
             }
    }')
    if [ "$continue" != "" ]; then
        break
    fi
done
	
	#Remise en etat DHCP non rescue
	#dhclient
	if sudo cp /etc/dhcp/dhclient.conf.backup_orig /etc/dhcp/dhclient.conf; then
		echo 'fichier dhclient modifie';
	else
		echo "Echec remise dhclient original" >> /diagbox/web/tmp/error.log
		exit
	fi

	#iptables
	if sudo cp /etc/iptables.ipv4.nat.backup_diagbox /etc/iptables.ipv4.nat; then
		echo 'fichier iptables modifié';
	else
		echo "Echec remise fichier iptables origine" >> /diagbox/web/tmp/error.log
		exit
	fi
	sudo iptables-restore < /etc/iptables.ipv4.nat

	#Modification interfaces eth0
	if sudo ifdown eth0; then
		echo 'arret eth0';
	else
		echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
	exit
	fi

	if sudo ifdown orange; then
		echo 'arret orange';
	else
		echo "Echec arret orange" >> /diagbox/web/tmp/error.log
	exit
	fi

	if sudo cp /etc/network/interfaces_DHCP /etc/network/interfaces; then
		echo 'configuration interfaces modifié';
	else
		echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
		exit
	fi

	if sudo ifup eth0; then
		echo 'activation eth0';
	else
		echo "Echec activation ethO" >> /diagbox/web/tmp/error.log
	exit
	fi
	
	#Effacer les fichiers tempo
	if sudo rm /diagbox/web/tmp/dhclient.conf; then
		echo "Fichier tempo dhclient efface"
	else
		echo "Echec effacement fichier tempo dhclient "
	fi
	
	iptables -t mangle -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
	iptables -t mangle -A POSTROUTING -o eth0 -j MASQUERADE
	iptables -t mangle -A FORWARD -i wlan0 -o eth0 -j ACCEPT
	
	#fini
	echo "ok" >> /diagbox/web/tmp/error.log
else
	echo "Echec ping" >> /diagbox/web/tmp/error.log
	exit
fi

Résultats des courses :slight_smile:

=> le scripts n’édite plus mon fichier texte avec les résultats dedans
=> le script met 4 minutes pour s’exécuter entièrement.

J’ai remarqué que quand j’enlève l’option -t 20 aux commandes iperf,
=> le scripts édite mon fichier texte avec les résultats dedans
=> le script met 2m30 minutes pour s’exécuter entièrement.

Je ne comprends pas ce qui bloque ( je fais faire mon enquiquineur mais j’ai besoin de l’option t 20) :slight_smile:

Et un autre point,
à la fin je remets ma carte en mode “normal”, c’est à dire je passe du mode “routeur dhcp” en mode carte classique.
mais à la fin, j’ai ça :

Killed old client process
/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /etc/resolvconf/run/resolv.conf
arret orange
configuration interfaces modifié
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/2c:4d:54:43:34:dd
Sending on   LPF/eth0/2c:4d:54:43:34:dd
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 11
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 20
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

En cherchant, j’ai compris que c’est le serveur dhcp qui cherche à trouver une adresse.
Peut on annuler cette commande? elle me prends 30 secondes.
Ca pourrait optimiser mon script :stuck_out_tongue:

Merci encore

1 J'aime

Bonjour

Si tu utilises l’option -t de la commande iperf3
avec une valeur de 20
le test durera deux fois plus longtemps (que les 10 secondes par défaut)

et les lignes à rechercher seront celles qui contiennent
la chaîne de caractère : 0.00-20.00
au lieu de : 0.00-10.00

Mais le plus simple, sera de faire en sorte de récupérer les lignes
qui contiennent le mot senderou receiver dans leur dernier champ.


Donc, utilises plutôt la dernière version du script
comme dans ce qui suit :

for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -t 20 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt"
    else if ($NF ~ "sender|receiver")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done

Au top merci encore… Encore une question :slight_smile:
Peut on interrompre un dhcp discovery ?
Quand je fais ifup-a

Merci

Bonjour

Je manque de compétences pour pouvoir répondre à cette question,
et aussi du contenu du fichier /etc/network/interfaces

Je sais seulement que l’option -a de la commande ifup
va activer, dans l’ordre où elle sont citées dans le fichier /etc/network/interfaces
chaque interface réseau qui y est spécifiée comme auto

Hello encore moi :slight_smile:

Je laisse tomber pour le dhcpdiscovery, car si je rebranche ma carte à un reseau avec le dhcp au moins elle récupère une ip automatiquement.

J’ai un autre soucis :slight_smile:

Pour l’interface web de la carte, j’ai écrit un script php pour exécuter le script sh que j’ai déjà mis.

voici le script php : (XXXXX => la variable que j’aimerais faire passer au script sh)

<?php
exec("/diagbox/scripts_sh/iperf_bouygues_ont.sh XXXXXX");
?>

Et voici le script sh

#!/bin/bash
#Effacer les fichier tempo si presents
if [ -f "/diagbox/web/tmp/dhclient.conf" ];then
	echo "Le fichier de configuration existe !";
	if sudo rm /diagbox/web/tmp/dhclient.conf; then
		echo "fichier dhclient efface"	
	else
		echo "Echec suppression tempo dhclient deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/iperf_upload.txt" ];then
	echo "Le fichier de iperf upload existe !";
	if sudo rm /diagbox/web/tmp/iperf_upload.txt; then
		echo "fichier iperf upload efface"	
	else
		echo "Echec suppression tempo iperf upload deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/iperf_download.txt" ];then
	echo "Le fichier de iperf download existe !";
	if sudo rm /diagbox/web/tmp/iperf_download.txt; then
		echo "fichier iperf download efface"	
	else
		echo "Echec suppression tempo iperf download deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi

if [ -f "/diagbox/web/tmp/error.log" ];then
	echo "Le fichier log erreur existe !";
	if sudo rm /diagbox/web/tmp/error.log; then
		echo "fichier log erreur efface"	
	else
		echo "Echec suppressionfichier log deja existant" >> /diagbox/web/tmp/error.log
		exit
	fi
fi


#fti conversion
**USERNAME=$1**
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f
for (( i=0; i<${#USERNAME}; i++ )); do
  HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs)
  AUTHSTRING=${AUTHSTRING}:${HEXCHAR}
done
echo ${AUTHSTRING} 

#Fichier dhclient
#Ecriture
echo 'option rfc3118-authentication code 90 = string;' >> /diagbox/web/tmp/dhclient.conf
echo "interface \"orange\" {" >> /diagbox/web/tmp/dhclient.conf
echo "send vendor-class-identifier \"sagem\";" >> /diagbox/web/tmp/dhclient.conf
echo "send user-class \"+FSVDSL_livebox.Internet.softathome.Livebox3\";" >> /diagbox/web/tmp/dhclient.conf
echo "send rfc3118-authentication ${AUTHSTRING} ;" >> /diagbox/web/tmp/dhclient.conf
echo 'request subnet-mask, routers,' >> /diagbox/web/tmp/dhclient.conf
echo 'domain-name, broadcast-address, dhcp-lease-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'dhcp-renewal-time, dhcp-rebinding-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'rfc3118-authentication;' >> /diagbox/web/tmp/dhclient.conf
echo 'supersede domain-name-servers 8.8.8.8, 8.8.4.4;' >> /diagbox/web/tmp/dhclient.conf
echo '}' >> /diagbox/web/tmp/dhclient.conf


#Deplacement
if sudo cp /diagbox/web/tmp/dhclient.conf /etc/dhcp/dhclient.conf; then
	echo 'fichier dhclient modifie';
else
	echo "Echec déplacement fichier dhclient" >> /diagbox/web/tmp/error.log
	exit
fi

#iptables
if sudo cp /etc/iptables.ipv4.nat.backup_rescue_dhcp /etc/iptables.ipv4.nat; then
	echo 'fichier iptables modifié';
else
	echo "Echec déplacement fichier iptables" >> /diagbox/web/tmp/error.log
	exit
fi
sudo iptables-restore < /etc/iptables.ipv4.nat

#Modification interfaces eth0
if sudo ifdown eth0; then
	echo 'arret eth0';
else
	echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
	exit
fi

if sudo cp /etc/network/interfaces_RESCUE_DHCP /etc/network/interfaces; then
	echo 'configuration interfaces modifié';
else
	echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
	exit
fi

if sudo ifup -a; then
	echo 'activation interfaces';
else
	echo "Echec activation interfaces" >> /diagbox/web/tmp/error.log
	exit
fi

for i in 0 1 2 3 4 5 6 7; do
## on définit pour chaque file une priorité
    if sudo vconfig set_egress_map orange $i $i >/dev/null; then
		echo "definition priorité ok"
	else
		echo "definition priorité ko"
	fi
done
	if sudo vconfig set_egress_map orange 1 0 >/dev/null; then
		echo " priorité 1 ok"
	else
		echo " priorité 1 ko"
	fi
	if sudo vconfig set_egress_map orange 0 6 >/dev/null; then
		echo " priorité 2 ok"
	else
		echo " priorité 2 ko"
	fi
  
sudo iptables -t mangle -A POSTROUTING -o orange -j CLASSIFY --set-class 0000:0001  
sudo iptables -t mangle -A POSTROUTING -o orange -p igmp -j CLASSIFY --set-class 0000:0006
sudo iptables -t mangle -A POSTROUTING -o orange -p icmp -j CLASSIFY --set-class 0000:0006 
sudo iptables -t mangle -A POSTROUTING -o orange -m dscp --dscp 0x2e -j CLASSIFY --set-class 0000:0005
sudo iptables -t mangle -A POSTROUTING -o orange -p udp --dport 67 -j CLASSIFY --set-class 0000:0006

sleep 10
#Test 8 pings
sudo ping 8.8.8.8 -c2 -q
if [ $? != 1 ]; then
	echo "connexion derrière ont opérationnel" 
	#test débit
#test débit
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -O 10 -t 20 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt"
    else if ($NF ~ "sender|receiver")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done
#Download
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -O 5 -R -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_download.txt"
    else if ($NF ~ "sender|receiver")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_download.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done
	
	#Remise en etat DHCP non rescue
	#dhclient
	if sudo cp /etc/dhcp/dhclient.conf.backup_orig /etc/dhcp/dhclient.conf; then
		echo 'fichier dhclient modifie';
	else
		echo "Echec remise dhclient original" >> /diagbox/web/tmp/error.log
		exit
	fi

	#iptables
	if sudo cp /etc/iptables.ipv4.nat.backup_diagbox /etc/iptables.ipv4.nat; then
		echo 'fichier iptables modifié';
	else
		echo "Echec remise fichier iptables origine" >> /diagbox/web/tmp/error.log
		exit
	fi
	sudo iptables-restore < /etc/iptables.ipv4.nat

	#Modification interfaces eth0
	if sudo ifdown eth0; then
		echo 'arret eth0';
	else
		echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
	exit
	fi

	if sudo ifdown orange; then
		echo 'arret orange';
	else
		echo "Echec arret orange" >> /diagbox/web/tmp/error.log
	exit
	fi

	if sudo cp /etc/network/interfaces_DHCP /etc/network/interfaces; then
		echo 'configuration interfaces modifié';
	else
		echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
		exit
	fi

	if sudo ifup eth0; then
		echo 'activation eth0';
	else
		echo "Echec activation ethO" >> /diagbox/web/tmp/error.log
	exit
	fi
	
	#Effacer les fichiers tempo
	if sudo rm /diagbox/web/tmp/dhclient.conf; then
		echo "Fichier tempo dhclient efface"
	else
		echo "Echec effacement fichier tempo dhclient "
	fi
	
	sudo iptables -t mangle -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
	sudo iptables -t mangle -A POSTROUTING -o eth0 -j MASQUERADE
	sudo iptables -t mangle -A FORWARD -i wlan0 -o eth0 -j ACCEPT
	
	#fini
	echo "ok" >> /diagbox/web/tmp/error.log
else
	echo "Echec ping" >> /diagbox/web/tmp/error.log
	exit
fi

Et voici l’erreur que j’ai quand je fais la commande

/diagbox/scripts_sh/iperf_bouygues_ont.sh: 48: /diagbox/scripts_sh/iperf_bouygues_ont.sh: Syntax error: Bad for loop variable

Bonjour

Ci-dessous, un extrait du script que tu as donné dans ton message précédent
en commençant à la ligne N°45

**USERNAME=$1**
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f
for (( i=0; i<${#USERNAME}; i++ )); do

Mais je ne comprends pas la syntaxe de la première ligne de cet extrait.

Hello.
C’est u’ script que j’avais trouvé sur un site pour convertir le fti(identifiant orange).

Je pense qu’il te faudrait le modifier afin qu’il soit comme dans le script que tu avais transmis il y a 6 jours
dont voici un extrait ci-dessous :

il te faudrait donc supprimer les deux étoiles qui sont situées avant et après

USERNAME=$1

On dirait que c’est un copié/collé depuis un extrait de texte
dont cette partie avait été “encadrée” par une suite de deux caractères étoiles
afin d’apparaître en gras dans une page web dont le balisage utilise la syntaxe markdown
(utilisée dans les messages de ce forum)