Probleme script avec PERL
Scrathi
-
scrathi -
scrathi -
Bonjour, c'est le premier script en Perl que je fait et j'ai un peu de mal avec ,
je dois faire un script qui se connecte sur les equipement en telenet pour prendre le fichier de log.
voici le script Pas fini mais j'ai deja des erreur :(
et donc apres je sais pas comment faire pour les corriger et il faut que je finise aussi les parti qui concerne les log ..
si vous pourriez m'aider ca serai tres sympa de votre part merci !
je dois faire un script qui se connecte sur les equipement en telenet pour prendre le fichier de log.
voici le script Pas fini mais j'ai deja des erreur :(
#!/usr/bin/perl -w use strict; use warnings; my $i; my $choix; my $nom; my $ip; my $telnet; my $username="admin"; my $passwd="motsdepasse"; unshift(@INC,"C:/Perl/lib"); use Net::Telnet; my $HOST=('$ip'); my $HOSTS=('$nom'); do { print "vous voulez recherche par nom ou Par adresse Ip ?\n"; print "nom=1 et Adresse Ip=2 Quitter=3\n"; print"choix:"; $choix=<STDIN>; if( $choix == 1 ) { print"vous avez fait le choix 1 \n"; print"Saisir un nom : "; $nom=<STDIN>; $telnet->open($HOSTS); $telnet->login($username, $passwd); } elsif( $choix == 2 ) { print"vous avez fait le choix 2\n"; print"saisir une adresse IP :"; $ip=<STDIN>; $telnet->open($HOST); $telnet->login($username, $passwd); } else { print"vous avez fait aucun choix \n"; } } until( $choix==3);
et donc apres je sais pas comment faire pour les corriger et il faut que je finise aussi les parti qui concerne les log ..
si vous pourriez m'aider ca serai tres sympa de votre part merci !
A voir également:
- Requires explicit package name at
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
11 réponses
Salut,
my $oid = « 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 »;
my $host = « $ip »;
Utilise des guillemets
my $oid = « 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 »;
my $host = « $ip »;
Utilise des guillemets
my $oid = "1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1"; my $host = $ip;
Merci , oui ça marche mieux effectivement une faute d'inattention , et comme c'est le premier pas beaucoup de rigueur mais ça me re-balance sur une autre erreur ..
global symbol"$sessions" requires explicit package name ligne 20
global symbol"$error" requires explicit package name ligne 20
Donc je leur attribué une variable
my $session;
my $error;
et donc il me fait ca actuellement syntax error at line near "my"
donc je comprend pas du tout ...
global symbol"$sessions" requires explicit package name ligne 20
global symbol"$error" requires explicit package name ligne 20
Donc je leur attribué une variable
my $session;
my $error;
et donc il me fait ca actuellement syntax error at line near "my"
donc je comprend pas du tout ...
merci mai s'etait une faute de syntaxe que je n'avais pas vu .
mais la je suis encore bloquer jamais deux sans 3... :(
j'ai active perl 5.10
le net snmp c'est installer daans le fichier cpan
mais quand je lance il me dit
can't locate NET/SNMP.pm in @inc mais quand je regarde le SNMP.pm est bien dedans ... et fait reference a la ligne 13..
que faire :( ?
mais la je suis encore bloquer jamais deux sans 3... :(
j'ai active perl 5.10
le net snmp c'est installer daans le fichier cpan
mais quand je lance il me dit
can't locate NET/SNMP.pm in @inc mais quand je regarde le SNMP.pm est bien dedans ... et fait reference a la ligne 13..
#!/usr/bin/perl -w use strict; use warnings; my $i; my $choix; my $nom; my $ip; my $telnet; my $username="admin"; my $passwd="motsdepasse"; use lib "C:/Perl/site/lib"; use Net::Telnet; use Net::SNMP; my $HOST=('$ip'); my $HOSTS=('$nom'); my $snmp_port = 161; my $oid = " 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 "; my $host = $ip ; my $community = " private "; my ($session, $error) = Net::SNMP->session(-hostname => $host,-timeout => 3,-retries => 1,-community => $community,-port => $snmp_port); do { print "vous voulez recherche par nom ou Par adresse Ip ?\n"; print "nom=1 et Adresse Ip=2 Quitter=3\n"; print"choix:"; $choix=<STDIN>; if( $choix == 1 ) { print"vous avez fait le choix 1 \n"; print"Saisir un nom : "; $nom=<STDIN>; $telnet->open($HOSTS); $telnet->login($username, $passwd); } elsif( $choix == 2 ) { print"vous avez fait le choix 2\n"; print"saisir une adresse IP :"; $ip=<STDIN>; $telnet->open($HOST); $telnet->login($username, $passwd); } else { print"vous avez fait aucun choix \n"; } } until( $choix==3);
que faire :( ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Tu es sur quelle distribution Linux?
mais quand je regarde le SNMP.pm est bien dedans ..
Tu devras dire plus. Tu regarde où? Dans quel répertoire?
Donne le chemin complet de ton module pm
Tu es sur quelle distribution Linux?
mais quand je regarde le SNMP.pm est bien dedans ..
Tu devras dire plus. Tu regarde où? Dans quel répertoire?
Donne le chemin complet de ton module pm
en faite je sais que c'est pas bien mais je suis sur windows ....
mais c'était un beuge j'ai redemarer la machine et c'est passer va savor pourquoi -_-'
donc il le prend bien en compte maitenant et tout les fichier son present ...
merci de tes réponses, et tu temps passer a me repondre
mais j'aurai encore besoin de soliciter tes conseil
j'arrive a lancer mon programme mais au debut il me dit que "Use of uninitialized value $host in substitution (s///) IPV4.pm ligne 64
Use of uninitialized value $host in substitution (s///) IPv4 ligne 72
c'est mon premier script et je connais pas tres bien , mais je comprend pas pourtant je lui est attribue une valeur dans le scripts
mais c'était un beuge j'ai redemarer la machine et c'est passer va savor pourquoi -_-'
donc il le prend bien en compte maitenant et tout les fichier son present ...
merci de tes réponses, et tu temps passer a me repondre
mais j'aurai encore besoin de soliciter tes conseil
j'arrive a lancer mon programme mais au debut il me dit que "Use of uninitialized value $host in substitution (s///) IPV4.pm ligne 64
Use of uninitialized value $host in substitution (s///) IPv4 ligne 72
c'est mon premier script et je connais pas tres bien , mais je comprend pas pourtant je lui est attribue une valeur dans le scripts
Re,
Affiche les lignes concernées. Merci.
Affiche les lignes concernées. Merci.
Ce deux ligne son tissu du fichier IPV4
elle me dit comme erreur "Use of Uninitialized value $host in substitution (s///)
Use of Uninitialized value in subroutine entry at (s///)
est ce qu'il y aurai conflit entre les deux $host de mon script et celle du fichieer IPV4 ?
parce qu'il se lance quand meme
my $serv = ($host =~ s/:([\w\(\)\/]+)$//) ? $1 : undef;
elle me dit comme erreur "Use of Uninitialized value $host in substitution (s///)
if (!defined ($nh->{addr} = inet_aton($_[1] = $host))) {
Use of Uninitialized value in subroutine entry at (s///)
est ce qu'il y aurai conflit entre les deux $host de mon script et celle du fichieer IPV4 ?
parce qu'il se lance quand meme
Re,
Mets en commentaire la ligne avec s/// et fait un
Mets en commentaire la ligne avec s/// et fait un
print "host => $host\n";
je peux pas modifier le fichier ipv4.pm a moins que j'en recre un et que je fasse ca .
et le print "host => $host\n";
je le fait sur mon script ?
et le print "host => $host\n";
je le fait sur mon script ?
package Net::SNMP::Transport::IPv4; use strict; use Net::SNMP::Transport; use IO::Socket qw( INADDR_ANY INADDR_LOOPBACK inet_aton PF_INET sockaddr_in inet_ntoa ); our $VERSION = v1.0.0; sub _socket_create { my ($this) = @_; return IO::Socket->new()->socket($this->_protocol_family(), $this->_protocol_type(), $this->_protocol()); } sub _protocol_family { return PF_INET; } sub _addr_any { return INADDR_ANY; } sub _addr_loopback { return INADDR_LOOPBACK; } sub _hostname_resolve { my ($this, $host, $nh) = @_; $nh->{addr} = undef; # my $serv = ($host =~ s/:([\w\(\)\/]+)$//) ? $1 : undef; <- celle la qui est avec les s/// if (defined($serv) && (!defined $this->_service_resolve($serv, $nh))) { return $this->_error('Failed to resolve the %s service', $this->type()); } if (!defined ($nh->{addr} = inet_aton($_[1] = $host))) { <- l'erreur subroutine return $this->_error( q{Unable to resolve the %s address "%s"}, $this->type(), $host ); } return $nh->{addr}; } sub _name_pack { return sockaddr_in($_[1]->{port}, $_[1]->{addr}); } sub _address { return inet_ntoa($_[0]->_addr($_[1])); } sub _addr { return (sockaddr_in($_[1]))[1]; } sub _port { return (sockaddr_in($_[1]))[0]; } sub _taddress { return sprintf '%s:%d', $_[0]->_address($_[1]), $_[0]->_port($_[1]); } sub _taddr { return $_[0]->_addr($_[1]) . pack 'n', $_[0]->_port($_[1]); } 1; # [end Net::SNMP::Transport::IPv4]
Re,
Je ne parle pas de toucher au module.
En regardant un peu plus ton code je vois des anomalies au début de script
my $HOST=('$ip');
my $HOSTS=('$nom');
Déjà $ip et $nom ne contient rien de tout.
Si les variables sont utilisé en tant que numérique alors elles sont initialisées à zéro sinon ça sera une chaine vide.
Ensuite même si $ip et $nom auraient été initialisées les apostrophes simples ne permettent pas l'interpolation des variables ce qui fait qu'en ce moment les variables contiennent :
$HOST contient la chaine $ip (littéral)
$HOSTS contient la chaine $nom (littéral)
my $host = $ip ; Ici $host contient la chaine vide donc dans ta session le hostname n'est pas défini il contient une chaine vide
my ($session, $error) = Net::SNMP->session(-hostname => $host ici c'est vide
Je ne parle pas de toucher au module.
En regardant un peu plus ton code je vois des anomalies au début de script
my $HOST=('$ip');
my $HOSTS=('$nom');
Déjà $ip et $nom ne contient rien de tout.
Si les variables sont utilisé en tant que numérique alors elles sont initialisées à zéro sinon ça sera une chaine vide.
Ensuite même si $ip et $nom auraient été initialisées les apostrophes simples ne permettent pas l'interpolation des variables ce qui fait qu'en ce moment les variables contiennent :
$HOST contient la chaine $ip (littéral)
$HOSTS contient la chaine $nom (littéral)
my $host = $ip ; Ici $host contient la chaine vide donc dans ta session le hostname n'est pas défini il contient une chaine vide
my ($session, $error) = Net::SNMP->session(-hostname => $host ici c'est vide
ah j'ai du mal compris les cours que j'ai vu alors :(
remarque j'apprend de mes erreus comme ca, avec mon premier script , mais je pensais qu'en mettant ca elle devrai prendre ce que je metais dans le $ip=<stdind>
et donc devrai ouvir le nom que je mettais donc c'est sur si c'est vide c'est normal que ca peut pas marcher :(,
j'ai enlever les simple guilemet pour qu'il les vois variable mes le probleme persiste :(
remarque j'apprend de mes erreus comme ca, avec mon premier script , mais je pensais qu'en mettant ca elle devrai prendre ce que je metais dans le $ip=<stdind>
et donc devrai ouvir le nom que je mettais donc c'est sur si c'est vide c'est normal que ca peut pas marcher :(,
j'ai enlever les simple guilemet pour qu'il les vois variable mes le probleme persiste :(
j'ai un peu avancer et modifier le script ;
avec des info sur un site et ce que tu me dit .
la j'essai de comprendre l'erreur 'problem connection 10.75.xxx.xx port 23 unknow error
ligne 42
avec des info sur un site et ce que tu me dit .
#!/usr/bin/perl -w use strict; use warnings; my $i; my $choix; my $nom; my $ip; my $t; my $telnet; my $username="admin"; my $passwd="motsdepasse"; use lib "C:/Perl/site/lib"; use Net::Telnet; $t = new Net::Telnet (Timeout => 10,Prompt => '/bash\$ $/'); use Net::SNMP; my $host; my $snmp_port = 161; my $oid = " 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 "; my $community = " public "; do { print "vous voulez recherche par nom ou Par adresse Ip ?\n"; print "nom=1 et Adresse Ip=2 Quitter=3\n"; print"choix:"; $choix=<STDIN>; if( $choix == 1 ) { print"vous avez fait le choix 1 \n"; print"Saisir un nom : "; $host=<STDIN>; $t->open($host); $t->login($username, $passwd); } elsif( $choix == 2 ) { print"vous avez fait le choix 2\n"; print"saisir une adresse IP :"; chomp ($host=<STDIN>); print "host => $host\n"; $t->open($host); $t->login($username, $passwd); <- cette ligne 43 } else { print"vous avez fait aucun choix \n"; } } until( $choix==3); my ($session, $error) = Net::SNMP->session(-hostname => $host,-timeout => 3,-retries => 1,-community => $community,-port => $snmp_port);
la j'essai de comprendre l'erreur 'problem connection 10.75.xxx.xx port 23 unknow error
ligne 42
j'ai un peu avancer et modifier le script ;
avec des info sur un site et ce que tu me dit .
la j'essai de comprendre l'erreur 'problem connection 10.75.xxx.xx port 23 unknow error
ligne 42
avec des info sur un site et ce que tu me dit .
#!/usr/bin/perl -w use strict; use warnings; my $i; my $choix; my $nom; my $ip; my $t; my $telnet; my $username="admin"; my $passwd="motsdepasse"; use lib "C:/Perl/site/lib"; use Net::Telnet; $t = new Net::Telnet (Timeout => 10,Prompt => '/bash\$ $/'); use Net::SNMP; my $host; my $snmp_port = 161; my $oid = " 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 "; my $community = " public "; do { print "vous voulez recherche par nom ou Par adresse Ip ?\n"; print "nom=1 et Adresse Ip=2 Quitter=3\n"; print"choix:"; $choix=<STDIN>; if( $choix == 1 ) { print"vous avez fait le choix 1 \n"; print"Saisir un nom : "; $host=<STDIN>; $t->open($host); $t->login($username, $passwd); } elsif( $choix == 2 ) { print"vous avez fait le choix 2\n"; print"saisir une adresse IP :"; chomp ($host=<STDIN>); print "host => $host\n"; $t->open($host); $t->login($username, $passwd); <- cette ligne 42 } else { print"vous avez fait aucun choix \n"; } } until( $choix==3); my ($session, $error) = Net::SNMP->session(-hostname => $host,-timeout => 3,-retries => 1,-community => $community,-port => $snmp_port);
la j'essai de comprendre l'erreur 'problem connection 10.75.xxx.xx port 23 unknow error
ligne 42
Re,
Oui, mais STDIN c'est bien après.
Je pense que pour le moment tu devras laisser tomber la boucle et faire un test un ip en dur pour voir si ça marche.
Si ça sera le cas alors tu verras pour le menu.
Voici un exemple (j'ai un peu rangé ton code) qui sera un bon début, puisque franchement, débutant en Perl c'est un peu compliqué ce que tu fais (en fait je ne sais pas encore ce que tu veux ;-)
Oui, mais STDIN c'est bien après.
Je pense que pour le moment tu devras laisser tomber la boucle et faire un test un ip en dur pour voir si ça marche.
Si ça sera le cas alors tu verras pour le menu.
Voici un exemple (j'ai un peu rangé ton code) qui sera un bon début, puisque franchement, débutant en Perl c'est un peu compliqué ce que tu fais (en fait je ne sais pas encore ce que tu veux ;-)
#!/usr/bin/perl -w use strict;use warnings; use Net::Telnet; use Net::SNMP; use lib "C:/Perl/site/lib"; my $username="admin"; my $passwd="motsdepasse"; my $community = " private "; my $snmp_port = 161; my $oid = " 1.3.6.1.4.1.318.1.1.12.1.5, 1.3.6.1.4.1.318.1.1.12.1.1 "; my $host = "ici tu mettras ta valeur"; my $nom = "ici tu mets ta valeur"; my ($session, $error) = Net::SNMP->session(-hostname => $host, -timeout => 3, -retries => 1, -community => $community, -port => $snmp_port ); # SNMP ça te sers à quoi en fait? my $telnet = new Net::Telnet (Timeout => 10); # par exemple $telnet->open($nom); $telnet->login($username, $passwd); # ensuite il faut lancer une commande pour faire un test
oui , je sais que pour un debutant c'est pas non plus facile mais on me la demander ,
j'utilise le snmp. dans le but de me connecter sur divers equipement qui me permeteron de remonter des infomation avec leur mib ou $oid
au lieu d'aller sur l'equipement lui meme utilise se programme pour le faire a la place
j'utilise le snmp. dans le but de me connecter sur divers equipement qui me permeteron de remonter des infomation avec leur mib ou $oid
au lieu d'aller sur l'equipement lui meme utilise se programme pour le faire a la place
http://img704.imageshack.us/img704/2742/pdu.jpg en image ^^
sinon l'erreur il me dit can't call method "open" on undefined value et apres le chemin du lien
je viens de rajouter des choses :( mais tjr autant de probleme que je ne connais pas
unrecognized charater \xAB ligne 17 ..
merci de m'aider .