[Batch] Programme tout con

Résolu
yirkkiller -  
Fonx2 Messages postés 348 Statut Membre -
Bonjour,

J'ai besoin d'aide pour un programme tout con. Je sais pas programmer en Batch Windows.

C'est un programme qui me demande l'adresse IP d'une machine, et le port à tester.

Ensuite, il la pinge jusqu'à ce que ça réponde, puis tente des telnet sur le port qu'on lui a donné jusqu'à ce que ça réponde. Quand c'est le cas, il nous affique que le PC est prêt.

J'ai fait l'algo, ça doit correspondre à peu près :

début

	demander $adresse_ip;
	demander $port;

	$ping = 0;
	tantque $ping != 1 faire
		$1 = ping $adresse_ip;
		si $1 = "OK" alors
			$ping = 1;
		finsi;
		sleep 1;
	fintantque;

	$telnet = 0;
	tantque $telnet != 1 faire
		$2 = telnet $adresse_ip $port;
		si $2 = "OK" alors
			afficher "Le serveur distant est prêt";
			$telnet = 1;
		finsi;
		sleep 1;
	fintantque;

fin


Je veux que ça puisse s'exécuter sur un PC Windows.

Merci pour votre aide ça doit être une rigolade pour vous !

6 réponses

  1. Fonx2 Messages postés 348 Statut Membre 132
     
    Salut,

    Bon moi j'avais eu besoin de faire des pings sur une liste d'adresse IP afin d'obtenir le nom de la machine.
    J'avais écrit sa (si sa peut t'aider...):

    title IP2Name
    echo off
    color F9
    cls

    echo.
    echo IP2Name
    echo ---------
    echo.
    echo.
    echo Ce programme a pour but de lancer automatiquement un Ping -a
    echo sur une liste de machine.
    echo La liste des machines ... tester est stock' dans "ListeIPPC.txt".
    echo.
    echo Veuillez cr'er/'diter ce document pour d'finir la liste des
    echo machines ... tester.
    echo.
    echo Lorsque le fichier "ListeIPPC.txt" correspond ... vos attentes,
    echo enregistrez-le et fermez-le.
    echo.
    echo En attente de l'utilisateur...

    IF NOT EXIST ListeIPPC.txt echo. > ListeIPPC.txt
    notepad ListeIPPC.txt

    echo.
    echo Pour quitter avant la fin des tests, appuyez sur "Ctrl+C".
    echo.
    echo Tests en cours. Veuillez patientez...

    IF EXIST ListeNomPC.txt del ListeNomPC.txt
    IF NOT EXIST ListeNomPC.txt echo. > ListeNomPC.txt

    for /f %%a in (ListeIPPC.txt) do (

    ping -a -n 1 -l 1 %%a >> ListeNomPC.txt

    )

    echo.
    echo Tests termin's. Les r'sultats ont 't' stock's dans le
    echo fichier "ListeNomPC.txt".
    echo.
    echo.
    echo Appuyez sur une touche pour ouvrir le fichier de r'sultat
    echo et quitter le programme...

    pause > nul

    start ListeNomPC.txt

    exit

    Bon courage!
    1
  2. yirkkiller
     
    C'est gentil à toi, même si ce n'est pas ce que je voulais ^^

    La difficulté est de récupérer la valeur du résultat de la commande...
    0
  3. yirkkiller
     
    J'ai déjà attaqué par ça :

    @echo off 
     SET adresseip= 
     SET /p adresseip=Adresse IP : 
      
     SET port= 
     SET /p port=Port a tester : 
      
     SET ping=1 
     SET telnet=1 
      
     while (ping=1) do 
      ping -n 1 %adresseip% | find "ttl" > NUL 
       
      set /A heurfin=%time:~6,2%+2 
      :start 
      set /a heur=%time:~6,2% 
      set /a temprestant=%heurfin%-%heur% 
      if "%heurfin%"=="%heur%" goto finpause 
      goto start 
      :finpause 
       
      if not ERRORLEVEL 1 SET ping=0 
     done 
    
     while (telnet=1) do 
      telnet %adresseip% %port% 
       
      set /A heurfin=%time:~6,2%+2 
      :start 
      set /a heur=%time:~6,2% 
      set /a temprestant=%heurfin%-%heur% 
      if "%heurfin%"=="%heur%" goto finpause 
      goto start 
      :finpause 
       
      if not ERRORLEVEL 1 SET telnet=0 
     done 
      
     echo "Le serveur distant est pret." 
      
    pause


    Il semblerait que mes deux erreurs soient :

    1) La boucle while ne marche pas (while n'est pas une commande)
    2) Il faudrait que je trouve comment break le telnet lorsqu'il marche (sinon il faut attendre la fin du timeout).

    Pour info la partie :

    set /A heurfin=%time:~6,2%+2 
      :start 
      set /a heur=%time:~6,2% 
      set /a temprestant=%heurfin%-%heur% 
      if "%heurfin%"=="%heur%" goto finpause 
      goto start 
      :finpause
    


    Permet d'attendre deux secondes (équivalent du sleep 2).

    Merci pour votre aide
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. yirkkiller
     
    Trouvé tout seul

    @echo off
    	SET adresseip=
    	SET /p adresseip=Adresse IP :
    	
    	SET port=
    	SET /p port=Port a tester :
    	
    	SET ping=1
    	SET telnet=1
    	
    		: Ping
    		ping %adresseip% -n 1 | find "TTL"
    		if ERRORLEVEL 1 goto Ping
    		if not ERRORLEVEL 1 SET ping=0
    
    		: Telnet
    		start telnet.exe %adresseip% %port%
    		if ERRORLEVEL 1 goto Telnet
    		if not ERRORLEVEL 1 SET telnet=0
    		echo "Le port est ouvert."
    		taskkill /F /IM telnet.exe > NUL
    	
    	echo "Le serveur distant est pret."
    	
    pause
    0
  6. Fonx2 Messages postés 348 Statut Membre 132
     
    Oui en bat, toutes les boucles se font via "goto" sauf pour la boucle "for".

    Bravo pour ta réussite.

    J'avoue que je ne connais pas bien telnet. J'aurrai donc eu du mal à t'aider.

    Et bien bonne utilisation de ton nouveau soft...

    PS: Si tu dois tester le disponibilité de plusieurs machines, tu n'auras qu'à récupérer une partie de mon code et l'insérer à la place de ton "set /p".

    Bonne continuation.
    0