OVH Cloud OVH Cloud

sessions telnet et multithread

2 réponses
Avatar
mpitto
bonjour a tous,

je suis débutant en perl, et j'ai pour un projet d'étude développé une
appli web en CGI qui permet de générer des sessions telnet préconfigurées
(en fait chaque session telnet envoie un ping avec le champ IP ToS
modifié...). Mon problème, c'est que les sessions telnet s'exécutent
bien, mais les unes après les autres et non pas simultanément...
je vous joins un résumé de mon code ; je dois en qq sorte créer un thread
par boucle "for" puisque cela correspond à une session.Mon code
fonctionne bien tel qu'il est

#!e:\perl\bin\perl
use Net::Telnet::Cisco;
use CGI;
$obj = new CGI;
print $obj->header,
$obj->center($obj->h1('Exécution terminée'));

[...]

#boucle exécutant une session telnet par test configuré
for ( $i=0 ; $i<$j ; $i++ )
{

[...]

#création de la session telnet
$telnet = Net::Telnet::Cisco->new(Host => $routeur1,Dump_Log =>
"./tmp/dump.log",Input_log => "./tmp/input.log", Output_log =>
"./tmp/output.log",Timeout => '120');
#passage en mode enable
$telnet->cmd('enable');
$telnet->cmd($pass);
$telnet->cmd("ping\n$protocol\n$routeur2\n$nbping\n$datagram\n
$timeout\n$extended\n$source_addr\n$champ_tos\n$fragment\n$validate\n
$datapattern\n$source_routing\n$sweep\n");
$telnet->close;
}
print $obj->end_html;


J'aimerai juste savoir si c'est possible sans trop de problèmes, et
quelles fonction je devrais utiliser (du genre fork ou system...meme si
je ne les connais pas), et pourquoi pas un exemple de code ou des
liens...

Merci beaucoup.
--
Mathieu.

mpitto@free.fr

2 réponses

Avatar
mpitto
en somme, est ce que je peux inclure ma session telnet dans un fork (ou un
système qui créerais un processus fils),et inclure ce fork lui meme dans
ma boucle for.
Si oui, avez vous qq indices :D

merci.


--
Mathieu.


Avatar
Patrick
J'aimerai juste savoir si c'est possible sans trop de problèmes, et
quelles fonction je devrais utiliser (du genre fork ou system...meme si
je ne les connais pas), et pourquoi pas un exemple de code ou des
liens...


C'est peut-être un chouilla overkill, mais c'est plus général, ca sera
plus facilement modifiable, et ca évite les fork: utiliser le framework
POE.

Avec le composant POE::Component::Client::TCP vous pouvez ouvrir autant
de sessions TCP ``en parallèle'' que vous souhaitez, c'est du multitache
coopératif, donc pas de threads, ni de forks, mais POE s'occupe d'allouer
un peu de temps à chaque session.

Cet exemple devrait vous mettre sur la piste:
http://poe.perl.org/?POE_Cookbook/TCP_Clients

Patrick.