La Fibre

Télécom => Logiciels et systèmes d'exploitation => testdebit Iperf => Discussion démarrée par: vivien le 20 mai 2016 à 09:13:25

Titre: Abus sur serveur iperf3 public
Posté par: vivien le 20 mai 2016 à 09:13:25
Savez-vous si il existe des logiciels qui analysent le trafic par IP sur un serveur, de façon à bloquer avec iptables les IP qui ont un trafic cumulé sur la journée > 50 Go ?
Toutes les 5 minutes, une cumul du trafic serait réalisé (quel que soit le port utilisé) et si > 50 Go, cela bloque l'IP avec /sbin/iptables -A INPUT -s xx.xx.xx.xx -j DROP. À minuit les règles sont supprimées et les compteurs ré-initialisés.

J'héberge un serveur iPerf3 public sur 3.testdebit.info
Je kill le serveur toutes les heures mais certains ont un script qui relance la connexion.

Certains ont aussi trouvé le moyen de consommer 100% d'un cœur :
(https://lafibre.info/images/stats/201605_iperf3_cpu.png) (https://lafibre.info/images/stats/201605_iperf3_cpuspeed.png)

L'impact sur le load average :
(https://lafibre.info/images/stats/201605_iperf3_load.png)
Titre: Abus sur serveur iperf3 public
Posté par: Optix le 20 mai 2016 à 09:47:56
Savez-vous si il existe des logiciels qui analyse le trafic par IP sur un serveur, de façon a bloquer avec iptables les IP qui ont un trafic cumulé sur la journée > 50 Go ?

Oui, IPTables lui-même. Par contre, cela nécessite une recompilation du kernel, car il faut ajouter un module/patch qui gère les quotas.

Plus d'info : http://www.netfilter.org/documentation/HOWTO/fr/netfilter-extensions-HOWTO-3.html#ss3.13
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 20 mai 2016 à 12:30:12
Sympatrique le patch quota, mais là ce n'est pas un quota général pour le serveur, mais un quota par IP. Si j'avais un nombre limité d'IP qui discutent avec le serveur je ferais une régle par IP, mais là c'est le monde entier qui peut discuter avec le serveur
=> Comment faire pour que cela ne bloque que l'IP qui a dépassé son quota (et cela nécessite de maintenir une table avec toutes les IP qui ont été connectées avec le serveur pour additionner le trafic)

Comme nfsen, il est possible de ne pas faire l'analyse pour tous les paquets, mais 1 paquet sur 100 c'est suffisant (dans ce cas la, on divise par 100 la taille du quota par IP)


Module/patch qui gère les quotas :
Ce patch par Sam Johnston <samj@samj.net> ajoute un nouveau match qui vous permet de mettre en place des quotas. Une fois que le quota a été atteint, la règle ne matche plus.

Par exemple, si vous voulez mettre un quota de 50Megs sur les données HTTP entrantes, faites comme suit :

    # iptables -A INPUT -p tcp --dport 80 -m quota --quota 52428800 -j ACCEPT
    # iptables -A INPUT -p tcp --dport 80 -j DROP

    # iptables --list
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:http quota: 52428800 bytes
    DROP       tcp  --  anywhere             anywhere           tcp dpt:http
Titre: Abus sur serveur iperf3 public
Posté par: BadMax le 20 mai 2016 à 14:55:19
Et un combo de limit et quota ? Avec limit, l'option --connlimit-mask 32 permet de sélectionner une seule IP/flux. Tu pourrais t'en servir pour faire une première sélection avant d'envoyer dans quota. Evidemment, à tester, aucune idée si ça marche aussi facilement :D
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 20 mai 2016 à 15:09:02
c'est pas possible avec tc/htb ?

sinon faut mettre un frontend devant ton iperf3 -> regardes du coté des reverse proxy et des firewall.
ou
mettre un 'truc' qui mesure la conso par IP et déclenche un script -> regardes du coté des analyseurs/superviseurs de réseau (ceux ayant la possibilité de déclencher des actions suivant des conditions).

Le probleme ici est l'aspect 'quota': on ne veut blocker/limiter le trafic vers une IP qu'apres un certain volume consommé. ca veut donc dire qu'il faut 'tracker' et sommer le volume pour chaque IP destination ce qui n'est pas simple et peut 'exploser' la mémoire du serveur.

L'alternative est d'intégré cela directement dans IPerf3...donc demander a l'auteur.
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 05 juin 2016 à 16:56:15
Une autre solution est d'utiliser ntop pour analyser le trafic (via Libpcap) et ensuite de scripter des actions (via Lua)
=> http://www.ntop.org

Cela doit par contre avoir un impact sur les performances, même si il dois être possible de ne analyser que un paquet sur 100 pour diminuer fortement la charge. En effet avec un paquet sur 100 on est en mesure de toujours identifier les gros consommateurs et leur trafic approximatif.

(https://lafibre.info/images/iperf/201606_ntopng_1.png)

(https://lafibre.info/images/iperf/201606_ntopng_2.png)
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 05 juin 2016 à 18:24:23
y'a pas moyen de parser le log d'iperf3 (server) et calculer les totaux par ip puis de blocker celles qui dépassent avec iptables?

iperf3 a une option pour sortir en json, on peut 'piper' (|) ca dans un script qui parse le json et fait le "boulot". le probleme c'est de faire le script ;)

Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 05 juin 2016 à 23:05:02
j'ai regardé rapidement pour faire ca en Python.

Le 1er probleme c'est de consommer le json produit 'test par test' , pour ca il y a splitstream:
sudo apt install python-pip
pip install --upgrade pip
pip install splitstream

puis un script Python (que j’appelle "iperf3tocvs.py") comme celui-la:

import json, sys
from splitstream import splitfile

# this will yield each test as a parsed json
objs = (json.loads(jsonstr) for jsonstr in splitfile(sys.stdin, format="json", bufsize=1))
print "ip,sent,received"
for obj in objs:
    # caveat: assumes multiple streams are all from same IP so we take the 1st one
    print "%s, %d, %d" % (obj["start"]["connected"][0]["remote_host"], obj["end"]["sum_sent"]["bytes"], obj["end"]["sum_received"]["bytes"])

puis

iperf3 -s -J | python iperf3tocvs.py
devrait afficher une ligne a chaque test avec l'ip, la conso up et down

par exemple:

ip,sent,received
ip: 2a01:xxx:xxx:xxx:xx:xx, 117047296, 117040064
ip: 2a01:xxx:xxx:xxx:xx:xx, 117047296, 117042944
ip: 192.168.1.31, 118751232, 118742800
ip: 192.168.1.56, 118751232, 118751232
...

y'a plus qu'a accumuler par IP et bloquer si ca dépasse une valeur donnée (upload, download ou les 2).
on peut éventuellement rajouter une whitelist et un reset quotidien ou hebdo.

c'est un bon début, je mettrais tout ca sur github demain. https://github.com/kgersen/iperf3protect
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 06 juin 2016 à 11:44:25
Cela fonctionne bien.
Une idée : rajouter dans les logs la date et l'heure du test + sa durée

Pour l'installation, il faut les droits root pour installer splitstream => c'est donc sudo pip install splitstream

$ /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5201 -J | python iperf3tocvs.py
ip,sent,received,direction
  2a01:6e00:10:410::2, 0, 1090125204, 0
2a01:6e00:10:410::2 is over the receive cap with 1090125204
2a01:6e00:10:410::2, 0 , 1090125204
  2a01:6e00:10:410::2, 1158050140, 0, 1
2a01:6e00:10:410::2 is over the send cap with 1158050140
2a01:6e00:10:410::2 is over the receive cap with 1090125204
2a01:6e00:10:410::2, 1158050140 , 1090125204
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 06 juin 2016 à 12:10:27
Je souhaiterais que le script en python se lance comme iperf avec l'utilisatuer nobody, donc j'ai mis des quote autour des commandes. Quel est la bonne solution ?

L'idée est simplement depuis le lancement en crontab root, lancer iperf3 avec l'utilisateur nobody et générer des fichiers de log. régulièrement le script est de nouveau appelé a fin de killer les sessions iperf plantées. iperf3 plante soit en sortant du programme, soit en affichant a l'infini 0 octets transféré, tout en consommant 100% d'un cœur.

#!/bin/dash
/bin/sleep 10
/usr/bin/killall iperf3
/bin/sleep 0.1
if [ `ps -C iperf3 | wc -l` != "1" ]
then
  /usr/bin/killall -9 iperf3
  /bin/sleep 0.1
fi
if [ `ps -C iperf3 | wc -l` = "1" ]
then
  echo "lancement de iperf3"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5200 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5201 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5201 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5202 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5202 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5203 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5203 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5204 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5204 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5205 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5205 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5206 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5206 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5207 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5207 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5208 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5208 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5209 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5209 2>&1 &"
  /usr/bin/sudo -u nobody "/usr/bin/iperf3 -s -p 5210 -J | python /home/vgu/scripts/iperf3tocvs.py >/home/log/iperf3/access5210 2>&1 &"
  echo "iperf3 ok"
fi
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 06 juin 2016 à 12:31:09
oula tu vas vite en besogne la, le script n'est pas encore fini et tu deplois déja...  ;D

pour le moment j'ai juste le parsing du json et l'accumulation des volumes par IP.
il manque encore les parametres de seuil, le 'pilotage' d'iptables et la whitelist (éventuellement).
une fois tout cela fait, il restera le plus compliqué: la gestion des erreurs et les cas particuliers (genre iperf qui plante).

A terme j'envisage aussi de ne plus utiliser splitstream puisqu'il requiert une installation.

Idéalement le script devrait lancer lui meme iperf3, le surveiller et le relancer si plantage mais on va faire simple dans un premier temps.

si tu veux un log, on facilement ajouter la date et l'heure de chaque test.

Quid du nettoyage d'iptables ? une IP bloquée c'est a vie ou uniquement via un déblocage manuel ?

ps: si le script tourne en nobody,je doute qu'il puisse modifier iptables. Dans ce cas faudra faire 2 scripts et transmettre les IP a bloquer a un process root. c'est peut-etre pas plus mal.
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 06 juin 2016 à 13:02:36
Si on a accès à des log proche d'Apache2, on peut utiliser d'autres outils d'analyse de log.

Je me demande si le mieux n'est pas de se limiter à faire d'iperf un vrai serveur, avec des logs proche du format Apache et pourquoi pas gérer les plantages et blocage avec utilisation de 100% du CPU.
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 06 juin 2016 à 20:23:23
oui on peut se contenter de modifier le script pour qu'il produise juste un log. C'est plus simple (et quasi fini) à  faire que d'essayer de manipuler iptables.

dis moi ce que tu veux dans le log (donc en sortie de iperf3tocvs.py )

pour chaque test, ca sortira une ligne du style:

date et heure, ip distante, cookie du client, duree du test, protocol, nombre de streams, volume sortant du a ce test, volume entrant du a ce test, volume total sortant pour cette IP, volume entrant total pour cette IP

bien sur, les totaux sont depuis que le script est lancé. si le script s’arrête et redémarre les totaux repartent de zero.
si on veut une mémorisation plus permanente il faut que le script relise son ancien log pour recharger les totaux, c'est possible à  faire mais plus compliqué.

Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 06 juin 2016 à 20:45:53
j'ai mis a jour le script iperf3tocvs.py sur github: https://github.com/kgersen/iperf3protect

ca affiche :

date,ip,duration,protocol,streams,cookie,sent,receive,totalsent,totalreceived


ps: nouvelle version "python2 compliant" (c’était python3 avant)
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 16 juin 2016 à 09:05:46
J'ai toujours des pb pour le script de lancement d'iperf3 : sudo n’apprécie pas que je mette de guillemets pour indiquer de prendre toute la commande en compte.

#!/bin/dash
/bin/sleep 1
/usr/bin/killall iperf3
/bin/sleep 0.1
if [ `ps -C iperf3 | wc -l` != "1" ]
then
  /usr/bin/killall -9 iperf3
  /bin/sleep 0.1
fi
if [ `ps -C iperf3 | wc -l` = "1" ]
then
  echo "lancement de iperf3"
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access5200 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5201 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5201 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5202 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5202 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5203 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5203 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5204 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5204 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5205 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5205 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5206 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5206 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5207 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5207 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5208 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5208 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5209 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5209 2>&1 &
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5210 -J | python /home/vgu/scripts/iperf3tocsv.py >/home/log/iperf3/access5210 2>&1 &
  echo "iperf3 ok"
fi

Avec ce script, j'ai ce type d'erreur lors des "kill" d'iperf que je fais régulièrement via le script ci-dessus :
# ./restart_iperf.sh
Traceback (most recent call last):
  File "/home/vgu/scripts/iperf3tocsv.py", line 75, in <module>
    main()
  File "/home/vgu/scripts/iperf3tocsv.py", line 37, in main
    ip = (obj["start"]["connected"][0]["remote_host"]).encode('ascii', 'ignore')
IndexError: list index out of range
lancement de iperf3
iperf3 ok
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 16 juin 2016 à 11:57:49
ca marche pas entre simple quotes ?

/usr/bin/sudo -u nobody '/usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access5200 2>&1'
au besoin faire un script qui inclus la commande et lance que le script

script "iperf3job.sh"
#!/bin/sh
/usr/bin/iperf3 -s -p $1 -J | python /home/vgu/scripts/iperf3tocsv.py & >/home/log/iperf3/access$1 2>&1

puis
Citer
...
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5200 &
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5201 &
  /usr/bin/sudo -u nobody /bin/sh /chemin/to/iperf3job.sh 5202 &
...

ca te permet de modifier le script sans toucher aux lignes de lancement.


Pour l'erreur lors du kill c'est normal, le script ne fait aucun controle d'erreur pour le moment.
C'est gênant en pratique ou pas? (je vois que tu fusionnes stderr et stdout, éventuellement met les dans 2 log distincts).
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 16 juin 2016 à 14:55:09
Les simples quotes comme les doubles ne fonctionnent pas :

# /usr/bin/sudo -u nobody '/usr/bin/iperf3 -s'
sudo: /usr/bin/iperf3 -s: command not found

Par contre, si je ne mets pas d'argument /usr/bin/sudo -u nobody '/usr/bin/iperf3' fonctionne.

Impossible de lancer un script avec un argument non plus...
Titre: Abus sur serveur iperf3 public
Posté par: clean31 le 16 juin 2016 à 15:07:39
A tester, mais dans le man sudo on trouve un exemple via un sous-shell.

Ca donnerai ça :

# /usr/bin/sudo -u nobody sh -c "/usr/bin/iperf3 -s"
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 16 juin 2016 à 19:45:20
Effectivement, cela fonctionne comme ça :

#!/bin/dash
/bin/sleep 1
/usr/bin/killall iperf3
/bin/sleep 0.1
if [ `ps -C iperf3 | wc -l` != "1" ]
then
  /usr/bin/killall -9 iperf3
  /bin/sleep 0.1
fi
if [ `ps -C iperf3 | wc -l` = "1" ]
then
  echo "lancement de iperf3"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5200 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5201 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5202 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5203 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5204 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5205 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5206 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5207 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5208 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5209 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  /usr/bin/sudo -u nobody /bin/dash -c "/usr/bin/iperf3 -s -p 5210 -J | python /home/vgu/scripts/iperf3tocsv.py >>/home/log/iperf3/access.log 2>>/home/log/iperf3/error.log &"
  echo "iperf3 ok"
fi

Par contre, les log ne se remplissent qu’après le kill de iperf3 !

J'ai essayé en déplaçant le "&" juste après iperf3tocsv.py et là la redirection n'est pas prise en compte : les log s'affichent en temps réel, mais dans le Shell parent.

J'ai mis en ligne ce premier script sur le site iperf : https://iperf.fr/iperf-download.php#log
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 16 juin 2016 à 21:51:14
Sans doute la taille des bufffers. Il faudrait que je flush dans le script.

Essais avec "python -u /home/vgu/scripts/iperf3tocsv.py" , l'option -u est censée résoudre cela (voir http://linux.die.net/man/1/python ). Sinon tu peux utiliser la commande 'unbuffer' (voir http://linux.die.net/man/1/unbuffer ).
Titre: Abus sur serveur iperf3 public
Posté par: vivien le 16 juin 2016 à 22:27:43
python -u résout bien le problème.

Voici des suggestions pour la todo liste :
- Afficher dans les logs, le port utilisé coté serveur et coté client
- Afficher le débit moyen en in et en out en Mb/s.
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 17 juin 2016 à 21:25:14
je regarde ca à  partir de mardi.
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 25 juin 2016 à 11:50:28
j'ai rajouté

"localport" "remoteport" "sent_mbps" et "rcvd_mbps"

maj sur le github ( https://github.com/kgersen/iperf3protect )
Titre: Abus sur serveur iperf3 public
Posté par: kgersen le 12 septembre 2016 à 21:10:06
version 1.1 dispo ( https://github.com/kgersen/iperf3protect )

- les noms des colonnes ne sont plus affichés. l'option '-h' permet de les afficher puis arrete le programme.
- ignore la plupart des erreurs et continu. un message est envoyé sur stderr en cas d'erreur
- dépendance a slipstream supprimée

@vivien:

 tu devrais pouvoir repasser le script sur tes rawjson archivées

pour l'option -h, le principe est le suivant:

python iperf3tocsv -h > log.cvs
iperf3 ... | python iperf3tocvs >>log.cvs 2>>error.log


-h affiche donc les entêtes et termine, il fait rien d'autre