Bonjour,

J'ai laissé faire un script perl et j'aimerai savoir si ce dernier regroupe tout ce que j'ai demandé.

Je voulais que ce script tourne en tache de fond tel un daemon.

Il doit se connecter à ma base mysql contenant près de 70000 adresses ip, et tester les adresses par aquet de 600 en multithreading.

Si le serveur distant répond, on le laisse dans ma base et on update le champ "Status" à "Verified et le champ "LastCheck" à l'heure actuelle.

Si le serveur distant ne réponds pas, on le supprime de la base.

D'après ce que je vois, concernant les update, cela a été appliqué...Par contre au niveau du multithreading, je ne crois pas...Si je comprends, le script ne sélectionne que les 600 premières entrées et les testent. Mais je ne crois pas que c'est en multithread, ni toutes les adresses de la base ou bien?

Merci de m'apporter tous vos commentaires sur ce script...

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
#!/usr/bin/perl -w
 
use DBI;
use Date::Format;
use Net::Telnet;
sub testaddress($$);
sub update_ip($);
sub remove_ip($);
#Params=================
my $pingtimeout= '25'; #timeout 25 secs..
my $iplimit = '600'; #number of address to test.
my $sqlhost="localhost"; # mysql server
my $sqluser = ""; #mysql username 
my $sqlpass = ""; #root passwd
my $sqldb = ""; #ip adress db
my $sqltable = "listeIp"; 
#Fin params=============
my $dbh = DBI->connect("DBI:mysql:database=$sqldb:host=$sqlhost",$sqluser,$sqlpass) or die ("Cannot connect to db");
my $getip = $dbh->prepare("select Ipadress, port from listeIp limit $iplimit");
$getip->execute() or die "Cannot get IP list. \n";
while(my $result = $getip->fetchrow_hashref()){
    my $ip = $result->{"Ipadress"};
    my $port = $result->{"port"};
    my $res = testaddress($ip,$port);
    if(!$res){
	remove_ip($ip);
    }
    else{
	update_ip($ip);
    }
}
$dbh->disconnect();
exit;
 
sub testaddress($$){
    my $ok=0;
    my ($ip,$port)=@_;
    $p = new Net::Telnet (Host    => $ip,
			  Port    => $port,
			  Timeout => $pingtimeout,
			  Errmode => "return");
    return($p);
}
 
sub remove_ip($){
    my ($ip)=@_;
    my $rem = $dbh->prepare("delete from listeIp where Ipadress='$ip'");
    $rem->execute() or die "Cannot delete $ip from IP table\n";
}
sub update_ip($){
    my ($ip)=@_;
    my $update_lc = $dbh->prepare("update listeIp set LastCheck=Now() where Ipadress='$ip'");
    $update_lc->execute() or die "Cannot update LastCheck value for $ip";
    my $update_stat = $dbh->prepare("update listeIp set Status='Verified' where Ipadress='$ip'");
    $update_stat->execute() or die "Cannot update Status for $ip";
}