#1 16-08-2009 16:01:33

nonsolum
On est bien ici
Date d'inscription: 20-07-2009
Messages: 102

Diagnostic réseau sous Windows XP et Windows VISTA

Bonjour à tous,

Objet : réalisation d’un fichier de commandes pour diagnostiquer le réseau.

Compatibilité : Windows XP et Windows VISTA versions françaises.
(l’application n’a pas été testée sous d’autres environnements mais ceci devrait fonctionner sans problème sous Windows 2000)

Avant-propos : L’invite de commandes Microsoft (cmd.exe) permet de faire appel à différentes commandes externes de diagnostic réseau.
Par exemple : ipconfig /all
Problème : si les sorties de l’invite de commande sont trop nombreuses vous ne pourrez pas visionner les premières pages et devez avoir recours à un « pipe » :

Ipconfig /all | more

Ceci permet un affichage page par page.
Peu pratique et retour arrière limité.
Par ailleurs vous aurez besoin de différentes commandes pour avoir un diagnostic le plus complet possible.
Vous devrez donc taper à la suite différentes commandes et serez obligé de copier au fur et à mesure les sorties affichées dans l’invite de commandes.
Solution : rediriger les sorties de commande vers un fichier « log » que vous pourrez ensuite consulter à loisir.

Nous allons donc :
Réaliser un fichier de commandes réseau que nous nommerons net.cmd
(les sorties des commandes seront redirigées vers un fichier appelé net.log constitué dans le même dossier que celui de net.cmd)
Ensuite créer un fichier de conversion OEM-ANSI que nous nommerons oem-ansi.vbs et que nous placerons dans le dossier %windir%\system32.

PROCEDURE

1) Ouvrir une session sous un compte administrateur.

2) Création du fichier net.cmd
Dans un premier temps nous placerons ce fichier sur le bureau.

    - click droit sur le bureau
    - Nouveau -> Document texte
    - nommer le fichier  net.txt
    - ouvrir le fichier net.txt
    - copier/coller le script suivant :



@echo off
rem mémorise dans la variable "code" la page de codes active
for /f "tokens=2 delims=:" %%a in ('chcp') do set code=%%a

rem mémorise dans la variable "version" la version Windows installée
for /f "tokens=1 delims=." %%b in ('ver') do set version=%%b

rem change de page de code
chcp 1252

echo TESTS RESEAU  > .\net.log
date/t    >> .\net.log
time /t    >> .\net.log
ver    >> .\net.log

echo ***************************************************** >> .\net.log
echo cmd: ipconfig /all  >> .\net.log
echo configuration des cartes réseau  >> .\net.log
echo ***************************************************** >> .\net.log

IF "%version%"  ==  "Microsoft Windows [version 6" goto vista
IF NOT "%version%"  ==  "Microsoft Windows [version 6" goto autre

:vista
ipconfig /all | cscript %windir%\system32\oem-ansi.vbs >> .\net.log
goto FIN

:autre
ipconfig /all  >> .\net.log
goto FIN
:FIN


echo ***************************************************** >> .\net.log
echo ping sur boucle locale  >> .\net.log
echo permet de tester si la pile TCP/IP est opérationnelle >> .\net.log
echo ***************************************************** >> .\net.log

ping 127.0.0.1 | cscript %windir%\system32\oem-ansi.vbs >> .\net.log

echo ***************************************************** >> .\net.log
echo ping sur livebox >> .\net.log
echo permet de tester si la livebox répond >> .\net.log
echo ***************************************************** >> .\net.log

ping 192.168.1.1 -a | cscript %windir%\system32\oem-ansi.vbs >> .\net.log

echo ***************************************************** >> .\net.log
echo ping sur site distant >> .\net.log
echo permet de tester si connexion internet opérationnelle >> .\net.log
echo ***************************************************** >> .\net.log

ping 193.252.149.20 -a | cscript %windir%\system32\oem-ansi.vbs >> .\net.log

echo ***************************************************** >> .\net.log
echo cmd: nslookup www.orange.fr  >> .\net.log
echo permet de tester si le DNS proxy ou distant répond  >> .\net.log
echo ***************************************************** >> .\net.log

nslookup www.orange.fr  >> .\net.log
break

echo ***************************************************** >> .\net.log
echo cmd: ipconfig /displaydns >> .\net.log
echo cache DNS: la résolution de noms a-t-elle bien été mise en cache ?  >> .\net.log
echo ( en "A" ou "PTR" )    >> .\net.log
echo ***************************************************** >> .\net.log

IF "%version%"  ==  "Microsoft Windows [version 6" goto vista
IF NOT "%version%"  ==  "Microsoft Windows [version 6" goto autre
:vista
ipconfig /displaydns | cscript %windir%\system32\oem-ansi.vbs >> .\net.log
goto FIN

:autre
ipconfig /displaydns  >> .\net.log
goto FIN
:FIN

echo ***************************************************** >> .\net.log
echo cmd: nbtstat -c et nbtstat -n  >> .\net.log
echo cache de nom netbios local et distant  >> .\net.log
echo permet de tester si la résolution de nom netbios est opérationnelle >> .\net.log
echo ( si configuration par défaut netbios sur tcp/ip ) >> .\net.log
echo ***************************************************** >> .\net.log

nbtstat -n | cscript %windir%\system32\oem-ansi.vbs >> .\net.log
nbtstat -c | cscript %windir%\system32\oem-ansi.vbs >> .\net.log

echo ***************************************************** >> .\net.log
echo cmd: netstat  >> .\net.log
echo permet d'afficher tous les ports actifs (à l'écoute) >> .\net.log
echo sur un ordinateur tant en TCP qu'en UDP. >> .\net.log
echo ***************************************************** >> .\net.log

IF "%version%"  ==  "Microsoft Windows [version 6" goto vista
IF NOT "%version%"  ==  "Microsoft Windows [version 6" goto autre
:vista
netstat | cscript %windir%\system32\oem-ansi.vbs >> .\net.log
goto FIN

:autre
netstat >> .\net.log
goto FIN
:FIN

rem restaure la page de codes initiale
chcp %code%

start notepad .\net.log

- enregistrer et fermer le fichier.
      - renommer le fichier en net.cmd
     (ne tenez pas compte du message d’avertissement)
      - vous pouvez nommer ce fichier à votre convenance
      (mais gardez impérativement l’extension *.cmd)
      - vous pouvez également, si vous le souhaitez, placer ce fichier dans le dossier de votre choix
      (faites alors   un raccourci sur le bureau).

3) Création du fichier oem-ansi.vbs.

        - click droit sur le bureau
    - Nouveau -> Document texte
    - nommer le fichier oem-ansi.txt
    - ouvrir le fichier oem-ansi.txt
    - copier/coller le script suivant :

Avertissement :

Nous devons ce script à :
Jean-claude Bellamy
mis gracieusement à la disposition des internautes.
Qu’il en soit remercié.

Voici ce script :

' ----------------------------------------------------------
' Script de Conversion OEM -> ANSI
'
' Syntaxe:
'   oem-ansi <srce> <dest>
'   <srce> : fichier source (texte OEM)
'   <dest> : fichier destination (texte ANSI)
'
' JC BELLAMY © 2002
' ----------------------------------------------------------
Dim oem
oem=array( _
"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", _
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", _
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", _
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", _
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", _
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", _
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", _
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", _
"C7","FC","E9","E2","E4","E0","E5","E7","EA","EB","E8","EF","EE","EC","C4","C5", _
"C9","E6","C6","F4","F6","F2","FB","F9","FF","D6","DC","F8","A3","D8","D7","83", _
"E1","ED","F3","FA","F1","D1","AA","BA","BF","AE","AC","BD","BC","A1","AB","BB", _
"A6","A6","A6","A6","A6","C1","C2","C0","A9","A6","A6","2B","2B","A2","A5","2B", _
"2B","2D","2D","2B","2D","2B","E3","C3","2B","2B","2D","2D","A6","2D","2B","A4", _
"F0","D0","CA","CB","C8","69","CD","CE","CF","2B","2B","A6","5F","A6","CC","AF", _
"D3","DF","D4","D2","F5","D5","B5","FE","DE","DA","DB","D9","FD","DD","AF","B4", _
"AD","B1","3D","BE","B6","A7","F7","B8","B0","A8","B7","B9","B3","B2","A6","A0")

ForReading = 1
ForWriting = 2

Dim args, fso, fsrce, fdest
Set fso   = WScript.CreateObject("Scripting.FileSystemObject")
Set args  = Wscript.Arguments

' Conversion OEM -> ANSI
If args.count<2 Then
    strFullName =lcase(WScript.FullName)
    i=InStr(1,strFullName,".exe",1)
    j=InStrRev(strFullName,"\",i,1)
    strCommand=Mid(strFullName,j+1,i-j-1)
    if strCommand<>"cscript" then
        Mess=       "Conversion OEM -> ANSI" & VBCRLF
        Mess=Mess & "JCB © 2002" & VBCRLF
        Mess=Mess & "----------------------" & VBCRLF
        Mess=Mess & "Syntaxe : " & VBCRLF
        Mess=Mess & "   oem-ansi <srce> <dest>"  & VBCRLF
        Mess=Mess & "   <srce> : fichier source (texte OEM)" & VBCRLF
        Mess=Mess & "   <dest> : fichier destination (texte ANSI)" & VBCRLF & VBCRLF
        Mess=Mess & "NB: pour utiliser les flux standards 'stdin' et 'stdout'," & VBCRLF
        Mess=Mess & "    le moteur de script par défaut doit être cscript.exe" & VBCRLF
        Mess=Mess & "    Cela s'obtient par la commande : " & VBCRLF
        Mess=Mess & "        cscript //H:CScript //S /Nologo" & VBCRLF & VBCRLF
        Mess=Mess & "Si le script récupère en entrée la sortie d'un autre logiciel (piping)," & VBCRLF
        Mess=Mess & "il faut indiquer explicitement 'cscript'" & VBCRLF
        Mess=Mess & "Exemple :" & VBCRLF
        Mess=Mess & "c:\>ping www.inria.fr | cscript oem-ansi.vbs > test.txt" & VBCRLF & VBCRLF
        wscript.echo Mess
        wscript.quit
    else
        Pipe=true
        Set fsrce = WScript.StdIn
        Set fdest = WScript.StdOut
        end if
else       
    Pipe=false
    srce=args(0)
    dest=args(1)
    If not fso.FileExists(srce) Then
        Mess="Le fichier " & srce & " n'existe pas"
        wscript.echo Mess
        wscript.quit
        End If
    Set fsrce=fso.OpenTextFile(srce, ForReading)
    Set fdest=fso.OpenTextFile(dest, ForWriting,true)
    end if
While not fsrce.AtEndOfStream
    oldline=fsrce.ReadLine
    newline=""
    For i = 1 To len(oldline)
        oldc=asc(mid(oldline,i,1))
        newc=oem(oldc)
        newline=newline & chr(hextobyte(newc))
        Next
    fdest.WriteLine newline
    Wend
fdest.close
fsrce.close
If not pipe Then wscript.echo "Conversion terminée"
Wscript.quit

' Utilitaires de conversion hexadécimale
' -------------------------------------
Function hextobyte(s)
c1=Left(s,1)
c2=Right(s,1)
hextobyte=hextobin(c1)*16+hextobin(c2)
End Function
' -------------------------------------
Function hextobin(c)
Select Case c
    Case "0","1","2","3","4","5","6","7","8","9"
        hextobin=asc(c)-asc("0")          
    Case else
        hextobin=asc(c)-asc("A")+10
    End Select   
End Function
' -------------------------------------

- enregistrer et fermer le fichier.
    - renommer le fichier en oem-ansi.vbs.
    (ne tenez pas compte du message d’avertissement)
    - copier le fichier en %windir%\system32\
    ( généralement : C:\windows\system32\ )

MISE EN ŒUVRE

    - rappel : vous devez être sous un compte administrateur
        1) sous Windows XP
    - double-click sur net.cmd ou sur son raccourci.
        2) sous Windows VISTA
        - <SHIFT> + click droit sur net.cmd ou sur son raccourci : "Exécuter en tant qu'administrateur"

    - le fichier net.log est automatiquement créé dans le dossier d’accueil de net.cmd
    - s’ouvre notepad pour visionner le résultat
    - le fichier net.log est écrasé à chaque exécution de net.cmd :
    Si vous voulez conserver trace du diagnostic renommer le fichier net.log.

LIENS UTILES :

Commandes réseau

Redirection des commandes vers bloc-notes

Dernière modification par nonsolum (14-10-2009 23:19:31)


non solum (sed etiam) -> c'est du latin
http://www.univers-orange.com/signature/AdBDQ0vy2Gph_BH00cqO_HOz7wo.png

Hors ligne

 

#2 16-08-2009 16:13:57

nonsolum
On est bien ici
Date d'inscription: 20-07-2009
Messages: 102

Re: Diagnostic réseau sous Windows XP et Windows VISTA

EXPLICATIONS

- créer un fichier enregistrant les sorties des commandes sous l’invite de commande (cmd.exe) ?
Rien de plus simple me diriez vous : il suffit d’utiliser les redirections > ou >>.
- Oui, mais faites le test suivant :

echo Test caractères accentués >  .\test.log
dir / ?  >> .\test.log
call notepad .\test.log

Vous constaterez que notepad (Bloc-Notes) n’affiche pas les caractères accentués.
Ceci est un problème de page de codes.
Les programmes de Windows utilisent le code ANSI.
Si on sélectionne à la souris le contenu d'une fenêtre de commandes, puis qu'on la copie pour enfin coller ce contenu dans Bloc-Notes, l'affichage est correct, Bloc-Notes faisant automatiquement la conversion. Même comportement avec Wordpad.
Mais le document obtenu avec une redirection ne bénéficiera pas de cette conversion automatique, les caractères accentués seront mal affichés.

CHCP
La commande CHCP permet de modifier le code de caractères utilisé par la fenêtre de commandes.
Retenir que le code 850 est celui utilisé par la console (OEM), et 1252 celui utilisé par Windows (ANSI).
code 850
code 1252

Pour obtenir un résultat correct nous devons changer de page de codes dans l’invite de commandes. Faites le test :

chcp 1252
echo Test caractères accentués >  .\test.log
dir / ?  >> .\test.log
rem rétablissement de la page de codes initiale
chcp 850
call notepad .\test.log

Ou plus rigoureusement

rem mémorise dans la variable "code" la page de codes active
for /f "tokens=2 delims=:" %a in ('chcp') do set code=%a
chcp 1252
echo Test caractères accentués >  .\test.log
dir  / ?  >> .\test.log
rem restaure la page de codes initiale
chcp %code%
call notepad .\test.log

Remarque: si vous copiez directement ce script dans l’invite de commandes conservez la notation %a pour la variable de la boucle « for » de la 2ème ligne.
Si vous passez par l’intermédiaire d’un fichier *.bat ou *.cmd utilisez la notation %%a.

Affaire classée ?
Non, loin s’en faut.
Essayez cela :

rem mémorise dans la variable "code" la page de codes active
for /f "tokens=2 delims=:" %a in ('chcp') do set code=%a
chcp 1252
echo Test caractères accentués >  .\test.log
ping 127.0.0.1   >> .\test.log
rem restaure la page de codes initiale
chcp %code%
call notepad .\test.log

Manifestement la commande externe ping.exe reste complètement insensible au changement de code chcp 1252 et la sortie de commande dans notepad n’affiche pas les caractères accentués.
Il faut donc trouver une autre technique.
Et c’est là que nous ferons appel au fichier de conversion OEM -> ANSI.
Si vous avez suivi la procédure préalablement décrite vous avez dû créer ce fichier oem-ansi.vbs dans %windir%\system32\.

Voici donc le nouveau script :

rem mémorise dans la variable "code" la page de codes active
for /f "tokens=2 delims=:" %a in ('chcp') do set code=%a
chcp 1252
echo Test caractères accentués >  .\test.log
ping 127.0.0.1 | cscript %windir%\system32\oem-ansi.vbs   >> .\test.log
rem restaure la page de codes initiale
chcp %code%
call notepad .\test.log

Vous croyez en avoir fini?
Hélas, non.
Il se trouve que certaines commandes externes réagissent différemment selon que nous nous trouvons sous Windows XP ou Windows VISTA.
Il en est ainsi de la commande : ipconfig.
Ainsi, si l’on veut une sortie correcte pour les caractères accentués, nous devons avoir recours à une structure conditionnelle (choix entre Vista et autre Windows)

Copier le script suivant dans un fichier que vous nommerez test.bat ou test.cmd :

rem mémorise dans la variable "code" la page de codes active
for /f "tokens=2 delims=:" %%a in ('chcp') do set code=%%a

rem mémorise dans la variable "version" la version Windows installée
for /f "tokens=1 delims=." %%b in ('ver') do set version=%%b

rem change de page de code
chcp 1252
echo Test caractères accentués > .\test.log

IF "%version%"  ==  "Microsoft Windows [version 6" goto vista
IF NOT "%version%"  ==  "Microsoft Windows [version 6" goto autre

:vista
ipconfig /all | cscript %windir%\system32\oem-ansi.vbs >> .\test.log
goto FIN

:autre
ipconfig /all  >> .\test.log
goto FIN
:FIN

rem restaure la page de codes initiale
chcp %code%

start notepad .\test.log

Tout ça pour ça: les caractères accentués.
Merci MICROSOFT.down

Il eut été peut-être préférable d’écrire ce script en powershell
powershell
Ce sera peut-être ma prochaine livraison.euh
A moins qu’une âme charitable se penche sur la question.big_smile

Dernière modification par nonsolum (21-08-2009 10:12:36)


non solum (sed etiam) -> c'est du latin
http://www.univers-orange.com/signature/AdBDQ0vy2Gph_BH00cqO_HOz7wo.png

Hors ligne

 

#3 16-08-2009 17:29:10

jerome40
Modérateur
Lieu: Saint Paul Lès Dax ( Landes )
Date d'inscription: 14-11-2008
Messages: 7436

Re: Diagnostic réseau sous Windows XP et Windows VISTA

nikel merci bcp


http://www.univers-orange.com/signature/D8eYknqai8CS1fa3R13mIg-iWqY.png
Technicien xDSL, Numeris et Ftth avant tout :-)

Hors ligne

 

#4 16-08-2009 18:42:51

Pierre56k
VIP / Ancien AT
Lieu: Angers
Date d'inscription: 18-01-2008
Messages: 4798
Site web

Re: Diagnostic réseau sous Windows XP et Windows VISTA

Oh la vache ! Tres joli tuto, je vais m'y intéressé de près !

Merci nonsolum !


http://img201.imageshack.us/img201/518/modo2.gif

Hors ligne

 

#5 16-08-2009 19:51:17

Citron
Membre
Lieu: Roquebillière
Date d'inscription: 10-08-2009
Messages: 16

Re: Diagnostic réseau sous Windows XP et Windows VISTA

Ca c'est du grand art. Bravo nonsolum!

Bon allez, au boulot.


http://www.univers-orange.com/signature/oVaUkgI4wFDHeM-HOpvVhooGsok.png Nota: Calibre 04

Hors ligne

 

#6 18-08-2009 22:19:23

nonsolum
On est bien ici
Date d'inscription: 20-07-2009
Messages: 102

Re: Diagnostic réseau sous Windows XP et Windows VISTA

RECTIFICATIF

Bonjour,

Pas toujours facile de tester tous les environnements possibles.

J'ai modifié le script de net.cmd.

Car il semblerait que le script précédent (dans la première version du tutoriel) ne convenait pas à toutes les versions de Vista.
Tout est en ordre maintenant.

Vous pouvez donc vous fier à la dernière mise à jour telle qu'elle figure dans le présent tutoriel.

Je souhaiterais avoir toutefois un retour de la part des utilisateurs de Vista.
A savoir si tout fonctionne correctement.

Merci pour votre réponse.

Dernière modification par nonsolum (08-09-2009 13:12:25)


non solum (sed etiam) -> c'est du latin
http://www.univers-orange.com/signature/AdBDQ0vy2Gph_BH00cqO_HOz7wo.png

Hors ligne

 

Powered by PunBB
© Copyright 2002–2008 PunBB