Test réseau avec un script ping

Au boulot, je me suis retrouvé régulièrement face à des situations délicates concernant le diagnostic réseau. Notamment pour diagnostiquer les micros-coupures, très difficiles à isoler et à expliquer oralement au client.  Elles peuvent être divers et variés : un câble réseau qui passe dans les roues de la chaise, la prise murale qui a un petit peu de jeu, ect…

Ce sont les applications utilisant le protocole UDP qui souffre le plus de ces micro-coupures et, légitimement, le client est persuadé que c’est un bug de l’application. Ce qui est légitime car ils utilisent l’application au quotidien et un fonctionnement anormal est forcément un bug logiciel.

La problématique était la suivante : montré au client noir sur blanc que ce n’est pas un problème logiciel mais un problème matériel.

D’où l’idée d’un script pinguant en continu depuis le serveur d’application les postes clients afin de logger les anomalies.

@echo off
:: Ce script permet de tester le réseau local d'un client
:: By Clement version 1.2

:: Déclaration des variables IP et MS, à saisir en exécutant le script
set /p IP="Saisir une IP : "
set /p MS="Valeur de test (en ms) : "

:: Déclaration des variables
set LOG="log_%COMPUTERNAME%_%IP%.txt"
set HEURE=%time:~,8%
set JOUR=%date%
set CHECK=1800

cls

:: Bloque de commentaire dans un fichier log et affichage à l'écran
(echo Test Ping en cours
echo Commencer le %JOUR%, %HEURE%
echo De %COMPUTERNAME% vers %IP%
echo Valeur de test : %MS%ms
echo.
echo ===============================
echo = NE PAS FERMER CETTE FENETRE =
echo ===============================
echo.) >> %LOG% | type %LOG%

:: Boucle relancer x fois (CHECK) permettant de logguer une ligne
:loop
set /a i=0
echo "====== %JOUR% %HEURE% ======" >> %LOG%

:: Boucle infini : commande ping avec 1 paquet et 1000ms (1s) d'attente
:: Si erreur le script log
:: Si pas d'erreur le script log les résultats supérieur ou égal à la valeur de test en ms
:: La boucle se relance toutes les secondes
:miniloop
set /a i=i+1
set HEURE=%time:~,8%
set JOUR=%date%

for /f "tokens=1,8 delims=m=^< " %%a in ('ping.exe -w 1000 -n 1 %IP% ^| findstr /i /c:"temps"^|^| echo "Ne Repond Pas"') do (
if "%%b" == "" (
echo "%HEURE% Ne repond pas" >> %LOG%
) ELSE (
if %%b GEQ %MS% (
echo "%HEURE% ms=%%b" >> %LOG%
)
)
timeout /t 1 > NUL
if %i%==%CHECK% goto loop
)
goto miniloop

En lançant le script, 2 questions vous seront posées (outre l’UAC de Windows) :

  • l’IP à pinguer
  • le temps en milliseconde anormal

La notion de temps de réponse est importante car cela permet de mettre en évidence l’encombrement du traffic ou les problèmes de latence dû à un wi-fi installable par exemple.

Il faut exécuter autant de fois le script qu’il y a de poste à pinguer. Je travaille sur un script Powershell permettant d’automatiser tout ça.

Une fenêtre DOS va s’afficher en indiquant (si un utilisateur trop curieux s’aventure) qu’un test réseau est en cours et qu’il ne faut pas fermer la fenêtre. La réduire est évidemment possible.

Enfin, le script créé un fichier log_ip.txt loggant les anomalies à la racine du script.

Pour y mettre fin, il suffit simplement de fermer les fenêtres. En général, je laisse tourner le test plusieurs heures.

Techniquement, un paquet ICMP est envoyé à l’IP mentionné. Le résultat est loggué si le poste ne répond pas ou est supérieur ou égal à la valeur testée en ms avec une limite de 1000ms (=1s).

Petite anecdote concernant une difficulté rencontrée. Bizarrement quand le ping se passait bien (< à 1ms) c’était loggué et évidemment ça inondait le log inutilement. Je vous laisse comprendre pourquoi en vous affichant 2 résultats :

 J’ai maudit Windows le jour où j’ai vu la différence 🙂

N’hésitez pas à apporter vos améliorations ou vos bugs. J’ajouterai avec plaisir vos contributions.

Bugs connus : parfois la console affiche mal le bloque de commentaire mais le script ping fonctionne.

Clément Kerbastard

Fondateur du site Opti-IT, administrateur système et réseau en alternance avec l'ENI et FUTUROSOFT, ancien joueur professionnel et enseignant de golf, ma reconversion dans l'informatique me donne toujours l'envie de partager mes connaissances.

Une pensée sur “Test réseau avec un script ping

  • 14 septembre 2019 à 15 h 37 min
    Permalink

    Bavo belle ligne de commande et très utile, avec un peut de réflexion nous pouvons encore faire vivre les fichiers en Batch.

    Répondre

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :