Salut à Tous,
je suis nouveau avec Perl ,
quelqu'1 a une idée comment configurer une switch via perl:
par exemple , j'ai besoin d'ajouter ou bien modifier le Gateway d'une switch,
via Perl et sous des commande telnet.
Merci d'avance
LOTO
Version imprimable
Salut à Tous,
je suis nouveau avec Perl ,
quelqu'1 a une idée comment configurer une switch via perl:
par exemple , j'ai besoin d'ajouter ou bien modifier le Gateway d'une switch,
via Perl et sous des commande telnet.
Merci d'avance
LOTO
si tu peut yeder par telnet utiliseCitation:
Envoyé par lotonetwork
#!/usr/local/bin/perl
use Net::Telnet qw(TELOPT_TTYPE);
use Term::VT102;
La difficulté de ce genre de chose, c'est que tu peux être amené à avoir une communication bidirectionnelle avec ton switch. Si c'est le cas, il faut utiliser le module Expect, ou IPC::Open2.
A moins que tu n'es qu'à charger un fichier de config précédemment créé, dans ce cas la solution de pentahertz est suffisante ;)
Citation:
Envoyé par pentahertz
voici un exemple plus concret
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 use Net::Telnet qw(TELOPT_TTYPE); use Term::VT102; use IO::Handle; # strict demande de definir les variables use strict; # initialisation des variables my ($ok, @tab, $data, $filename,$centre,@lignes, $i,$t,$logfile,@text1,$text2); my (@data,$data1,$data2,$version, $filelog,$data3 ); my $server = defined($ARGV[0]) ? $ARGV[0] : "192.168.1.254"; if ($server == "/?") { print ("-------------------------------------------------------------------- toto.exe [val1] val1 = adresse ip du produit a configurer ( par defaut 192.168.2.1 ) --------------------------------------------------------------------\n"); exit;} debut: #efface l'ecran clearscreen(); print (" CONFIGURATION DU MODEM ROUTER "); #nom du fichier centre my $passwd='smcadmin'; my $username ="root"; ##### $logfile="script.log"; ###### $t = new Net::Telnet (Timeout => 10); $t->errmode("return"); $t->option_callback (\&opt_callback); $t->option_accept ('Do' => TELOPT_TTYPE); $t->suboption_callback (\&subopt_callback); $t->open($server) or die "Routeur $server introuvable\n"; # $fh = $t->dump_log($logfile); $data = $t->get() ; print $data; $data = $t->get() ; print $data; sleep 1; # attendre User name mais ca peut etre autre chose sur un switch $t->waitfor ('User Name : $/i'); $t->print ($username); sleep 1; $t->waitfor ('User Password : $/i'); $t->print ($passwd); sleep 1; $t->waitfor ('/ROOT :> $/i')or die "mauvais mot de passe routeur ce n est pas \"$passwd\" \n "; print ("\nDemarrage de la configuration."); $t->print ('^U'); $t->waitfor ('/ROOT :> $/i'); #envoie show run au routeur # les données sont dans $data $t->print ("show run"); sleep 1; $data=$t->get() ; $t->waitfor('$/i'); $version= "V".substr($data,151,4); $filelog=">conf".$version.".log"; open (FIC3,$filelog); # > pour ouverture en ecriture print FIC3 ($data); close(FIC3); $t->close; print "\nFin de la configuration, \nAttendre quelques secondes avant de vous servir du routeur \n"; exit; # ici c'est fini #--------------------- subroutine ------------------------------------------ # Callback for "DO" handling - for Net::Telnet. sub opt_callback { my ($obj,$opt,$is_remote,$is_enabled,$was_enabled,$buf_position) = @_; if ($opt == TELOPT_TTYPE and $is_enabled and !$is_remote) { # # Perhaps do something if we get TELOPT_TTYPE switched on? # } return 1; } # Callback for sub-option handling - for Net::Telnet. # sub subopt_callback { my ($obj, $opt, $parameters) = @_; my ($ors_old, $otm_old); # Respond to TELOPT_TTYPE with "I'm a VT102". # if ($opt == TELOPT_TTYPE) { $ors_old = $obj->output_record_separator (''); $otm_old = $obj->telnetmode (0); $obj->print ( "\xff\xfa", pack ('CC', $opt, 0), 'vt102', "\xff\xf0" ); $obj->telnetmode ($otm_old); $obj->output_record_separator ($ors_old); } return 1; } # Callback for OUTPUT events - for Term::VT102. # sub vt_output { my ($vtobject, $type, $arg1, $arg2, $private) = @_; if ($type eq 'OUTPUT') { $private->print ($arg1); } } sub clearscreen{ @tab =("cls"); system @tab; }
Pentahertz, la prochaine fois utilise les balise CODE (édite ton message pour voir comment faire).
--
Jedaï