[..] Récupérer le retour d'un commande envoyé sur un routeur
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Récupérer le retour d'un commande envoyé sur un routeur
Bonjour a tous,
Je bloque pour récupérer le retour d'un "show line" sur un routeur.
Je m'explique.
J'ai fait un script qui me permet de lancé un invite de commande sous Windows puis il me connecte a mon équipement de rebond avec lequel j’accède a un routeur a qui j’envoie la commande "show line".
J'envoie cette commande grâce à un send.
Mon problème est que je n'arrive pas à voir comment récupérer le retour de ma commande vue que le send ne retourne rien.
Si quelqu'un a une idée je suis preneur merci d'avance.
Je bloque pour récupérer le retour d'un "show line" sur un routeur.
Je m'explique.
J'ai fait un script qui me permet de lancé un invite de commande sous Windows puis il me connecte a mon équipement de rebond avec lequel j’accède a un routeur a qui j’envoie la commande "show line".
J'envoie cette commande grâce à un send.
Mon problème est que je n'arrive pas à voir comment récupérer le retour de ma commande vue que le send ne retourne rien.
Si quelqu'un a une idée je suis preneur merci d'avance.
- blacksoul305
- Membre émérite

- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
Bonjour,
je suis pas sur d'avoir compris. Apparemment tu souhaiterais avoir un retour après avoir lancé une commande via le CMD ? Si c'est le cas, tu devrais lire le code posté par ani, qui m'a beaucoup aidé : ici.
je suis pas sur d'avoir compris. Apparemment tu souhaiterais avoir un retour après avoir lancé une commande via le CMD ? Si c'est le cas, tu devrais lire le code posté par ani, qui m'a beaucoup aidé : ici.
Étudiant en 2ème année de Licence Informatique.
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
Merci blacksoul305,
J'ai essayé de prendre exemple sur la solution que l'on t'avait apporté avec le Run et le ConsolWrite.Mais cela lance la commande dans un nouvelle invite de commande et non dans celui déjà ouvert.
Ce sera peu être plus explicite avec mon script :
J'ai essayé de remplacer mon Send("show line") par
Mais cela ne convient pas comme expliquer au début.
J'ai essayé de prendre exemple sur la solution que l'on t'avait apporté avec le Run et le ConsolWrite.Mais cela lance la commande dans un nouvelle invite de commande et non dans celui déjà ouvert.
Ce sera peu être plus explicite avec mon script :
Code : Tout sélectionner
Send("{LWIN}");simule un clic sur démarrer
MouseClick ("left",30,940);clic sur Exécuter
sleep(500)
send("cmd");écrit cmd dans Exécuter
send("{ENTER}");simule l'appuie de la touche entrée
send("set PATH=C:\Documents and Settings\BPXZ3853\Desktop\AUTOIT;%PATH%");Variable d'environnement pour plink
send("{ENTER}")
send("plink -ssh @ip -l login -pw motdepasse -agent");Connexion a mon serveur de rebond
send("{ENTER}")
send("telnet @ip");connection sur le routeur voulue
send("{ENTER}")
send("login");envoie du login
send("{ENTER}")
Send("motdepasse");envoi du mot de passe
send("{ENTER}")
Send("show line");envoie de ma commande
send("{ENTER}")
Code : Tout sélectionner
$CMD = Run(@comspec & " /c show line","","",$STDIN_CHILD + $STDOUT_CHILD)
Local $data
While True
$data &= StdoutRead($CMD)
If @error Then ExitLoop
Sleep(25)
WEnd
ConsoleWrite($data)
- Tlem
- Site Admin

- Messages : 11830
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
Au lieu d'utiliser une console DOS et d'essayer de capturer les retours telnet, utilisez directement un UDF dédié à la communication en telnet ou à l'automation de Plink ...
Vous devriez trouver cet UDF sur le forum US.
Vous devriez trouver cet UDF sur le forum US.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- blacksoul305
- Membre émérite

- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
+1 pour l'idée de Tlem.
En effet, passer par un UDF spécifique est beaucoup plus fiable et tu auras sûrement plus de fonctionnalités.
En effet, passer par un UDF spécifique est beaucoup plus fiable et tu auras sûrement plus de fonctionnalités.
Étudiant en 2ème année de Licence Informatique.
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
J'ai suivit vos conseils et J'ai trouvé un UDF qui pourrai faire mon bonheur. Cet UDF me permet d'utiliser une fonction qui s'appelle WshPipe, qui me permet si j'ai bien compris d'envoyer une commande et de récupérer le retour dans un tableau.
Voici le code de l'UDF :
Le problème est qu'il me sort une erreur lorsque je veux l'utiliser. Il met sort :
UDFWSHpipe(2).au3 (159) : ==> Missing separator character after keyword.:
EndFunction
EndFunction^ ERROR
Et le je ne comprends pas d’où viens cette erreur. Si quelqu'un a une idée.
Voici le code de l'UDF :
Code : Tout sélectionner
Function WshPipe($ShellCMD, OPTIONAL $NoEcho)
Dim $oExec, $Output
$oExec = CreateObject("WScript.Shell").Exec($ShellCMD)
If Not VarType($oExec)=9 $WshPipe="WScript.Shell Exec Unsupported" Exit 10 EndIf
$Output = $oExec.StdOut.ReadAll + $oExec.StdErr.ReadAll
If Not $NoEcho $Output Endif
$WshPipe=Split(Join(Split($Output,CHR(13)),''),CHR(10))
Exit($oExec.ExitCode)
EndFunction
UDFWSHpipe(2).au3 (159) : ==> Missing separator character after keyword.:
EndFunction
EndFunction^ ERROR
Et le je ne comprends pas d’où viens cette erreur. Si quelqu'un a une idée.
- Tlem
- Site Admin

- Messages : 11830
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
Il faudrait revoir la syntaxe du IF ...
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Re: [..] Récupérer le retour d'un commande envoyé sur un rou
Bon je n'ai pas réussi à exploiter cette fonction WshPipe qui en faite n'était pas codé en autoit -_-'.
Donc je suis partie sur autre chose. Maintenant j'utilise le TCPConnect et autre TCPsend et TCPRecv, mais je ne récupère pas ce que j’attends.
Le code édulcoré :
Je récupère bien le numéro de ma connexion que j'ai initialisé en telnet avec TCPConnect, mais je ne reçois jamais le message "login:" que je devrai recevoir, je ne reçois que "ÿý%" au début puis pue rien.
fichier de log :
retour1:ÿý%
retour2:
retour3:
retour4:
retour5:
Si vous voulez tout le code n'hésiter pas a demandé.
Donc je suis partie sur autre chose. Maintenant j'utilise le TCPConnect et autre TCPsend et TCPRecv, mais je ne récupère pas ce que j’attends.
Le code édulcoré :
Code : Tout sélectionner
Global $g_IP="xxx.xxx.xxx.xxx"
Global $login = "login"
Global $socket = TCPConnect($g_IP, 23)
$retour=_WaitRecvMsg("login:")
Func _WaitRecvMsg($szMsg)
Local $Begin = TimerInit()
While 1
$i=$i+1
Local $SrvMes = TCPRecv($socket, 1024)
FileWrite($log,"retour"&$i&":"&$SrvMes&@CRLF)
If StringInStr($SrvMes, $szMsg) Then
Return $SrvMes
EndIf
If TimerDiff($begin) > 5000 Then
SetError(1)
Return 0
EndIf
WEnd
EndFunc
fichier de log :
retour1:ÿý%
retour2:
retour3:
retour4:
retour5:
Si vous voulez tout le code n'hésiter pas a demandé.

