Je souhaite effectuer un ping en broadcast sur des switchs à travers un script TELNET Perl ou PHP.
Le but est simplement de remplir la table arp des équipements.
Je n'ai donc pas besoin de récupérer les résultats mais seulement d'envoyer la commande, sans aucune verif. Afin que tous cela se déroule assez rapidement.


Comment faut-il faire pour envoyer la commande sur l'équipement et interrompre le script ou passer à l'équipement suivant ?

J'ai fait cela, mais c'est extremement long !!!
Pour 400 équipements, + de 24 heures !!!!!!!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
#!/usr/bin/perl
#
# Script de ping par telnet
# 
# 
use warnings;
require '/home/www/tools/cisco.pl';
use Config::IniFiles;
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
 
#my $cfg=new Config::IniFiles( -file => "/home/www/config/config.ini");
#my $login=$cfg->val("login");
my $login="*********";
#my $passwd=$cfg->val("passwd");
my $passwd="*********";
my $enable='enable_password';
my $LOGDIR='/home/www/log/ping';
my $output="$LOGDIR/migCE2out.csv";
$DEBUG=1;
#$LIMITE=100;  # Nombre max de routeurs que l'on souhaite tester
my $addrAdmin=$ARGV[0];
my $mask=$ARGV[1];
my $eqtype=$ARGV[2];
 
if(not defined($addrAdmin)){
    print "STATUS=0\n";
    exit;
}else{
    print "ipAdmin=$addrAdmin\n";
}
 
open(F,">>$output") || die "Cannot open input file $output:$!\n";
#my $rtr=CiscoLogin2($login,$passwd,$addrAdmin,60);
my $rtr=Net::Telnet::Cisco->new(Host=>$addrAdmin,Errmode=>'return',
                                Timeout=>10,
                                Input_log=>"$LOGDIR/$addrAdmin.log"
                                );
if($rtr){
    my $prompt='/(?m:^[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$#> ]\s?(?:\(enable\))?\s*$)/';
    $rtr->ignore_warnings;
    $rtr->errmode("return");
    if($rtr->login(Name=>$login,Password=>$passwd,Prompt=>$prompt)){
    }else{
        print "$addrAdmin;echec login;\n";
        print "STATUS=0\n";
        exit;
    }
}else{
    print "$addrAdmin;echec telnet;\n";
    print "STATUS=0\n";
    exit;
}
my $status=0;
if($rtr){
    $telnetStatus='OK';
 
  # ping pour equipement catalyst
    if($eqtype=~m/CAT(.*)/i){
 
        my @cmd=("ping -s $mask 56 2");
        push(@cmd,"exit");
 
        foreach(@cmd){
            print ">> $_\n";
            @output=CiscoCmd($rtr,$_);
        }
    }else{
 
    # ping pour equipement cisco
 
        my @cmd=("ping","ip","$mask","2","56","2","n","n");
 #my @cmd=("ping $mask");
        push(@cmd,"exit");
 
        foreach(@cmd){
            print ">> $_\n";
            @output=CiscoCmd($rtr,$_);
        }
    }
 
 
    $status=1;
}else{
    debug("HS\n");
}
print F "$addrAdmin;$telnetStatus;\n";
CiscoLogout($rtr);
close F;
print "STATUS=$status\n";
 
sub debug{
    if($DEBUG==1){
        print @_;
    }
}
Merci