# Script bash pour lancer iperf3 sur plusieurs ports

**URL:** <https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301>\
**Category:** Programmation\
**Tags:** script, bash\
**Created:** [Avril 1, 2018, 9:00 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301 "2018-04-01T21:00:21Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 1, 2018, 9:00 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/1 "2018-04-01T21:00:21Z")

</div>

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

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é.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 2, 2018, 3:35 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/2 "2018-04-02T03:35:38Z")

</div>

Bonjour **domoticity**

> [@domoticity](#):
>
> …  
> Mon but final est d’écrire dans un fichier texte soit les valeurs du débit, soit le message erreur retourné.

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

```plaintext
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 :

```plaintext
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 :

```plaintext
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:~$ 

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 2, 2018, 8:36 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/3 "2018-04-02T08:36:55Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 2, 2018, 9:57 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/4 "2018-04-02T09:57:17Z")

</div>

> [@domoticity](#):
>
> …  
> Peux tu me dire si j’ai fait une erreur dans le code s’il te plait 🙂

Tu n’as fait aucune erreur,  
c’est un grand imbécile (que je connais bien : c’est moi 🙂 ) 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à 😠 😆

* * *

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

```plaintext
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

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 3, 2018, 3:55 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/5 "2018-04-03T15:55:44Z")

</div>

Hello  
Merci ton code fonctionne et c’est super rpatique 🙂  
Je vais encore t’embeter un peu 🙂  
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.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 3, 2018, 4:54 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/6 "2018-04-03T16:54:40Z")

</div>

Bonjour

Peut-être comme ça :

```nohighlight
#!/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

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 3, 2018, 5:19 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/7 "2018-04-03T17:19:40Z")

</div>

> [@anon29980398](#):
>
> ```plaintext
> #!/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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 5, 2018, 2:51 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/8 "2018-04-05T02:51:35Z")

</div>

> [@domoticity](#):
>
> …  
> je vais eplucher ton code pour le comprendre

Il y a mieux :

```bash
#!/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 :

```plaintext
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

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

```

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

```plaintext
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 «&nbsp;pipées&nbsp;» 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.

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 11, 2018, 8:15 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/9 "2018-04-11T20:15:42Z")

</div>

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 😛"

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

alors mon but est le suivant 🙂

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 🙂

=\> 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) 🙂

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 😛

Merci encore

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 11, 2018, 11:59 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/10 "2018-04-11T23:59:30Z")

</div>

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 `sender`ou `receiver` dans leur dernier champ.

* * *

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

```nohighlight
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

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 12, 2018, 9:02 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/11 "2018-04-12T21:02:00Z")

</div>

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

Merci

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 12, 2018, 9:44 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/12 "2018-04-12T21:44:24Z")

</div>

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**

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 16, 2018, 4:20 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/13 "2018-04-16T16:20:52Z")

</div>

Hello encore moi 🙂

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 🙂

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`

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 17, 2018, 6:18 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/14 "2018-04-17T06:18:02Z")

</div>

Bonjour

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

```nohighlight
**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.

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Avril 17, 2018, 5:00 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/15 "2018-04-17T17:00:41Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 17, 2018, 7:21 UTC](https://www.debian-fr.org/t/script-bash-pour-lancer-iperf3-sur-plusieurs-ports/76301/16 "2018-04-17T19:21:33Z")

</div>

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 :

> [@domoticity](#):
>
> …  
> #fti conversion  
> USERNAME=$1  
> AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f  
> …

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

```plaintext
USERNAME=$1

```

On dirait que c’est un copié/collé depuis un extrait de texte  
dont cette partie avait été «&nbsp;encadrée&nbsp;» 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](https://fr.wikipedia.org/wiki/Markdown)  
(utilisée dans les messages de ce forum)
