[Batch] Programme tout con

Résolu/Fermé
yirkkiller - 17 juin 2010 à 11:59
Fonx2 Messages postés 331 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2013 - 17 juin 2010 à 14:41
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

Fonx2 Messages postés 331 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2013 132
17 juin 2010 à 12:04
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
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
Up plz
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Fonx2 Messages postés 331 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2013 132
17 juin 2010 à 14:41
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