Спасибо огромное за скриптик, все работает.
Но все-таки нужна многопоточность
Пользователь добавил сообщение 19 Января 2017, 17:35:31:
Попробовал написать многопоточку,но
syntax error at ./ping line 14, near "if"
syntax error at ./ping line 17, near "}"
#!/usr/bin/perl -w
use Net::IP;
use Net::Ping;
use threads;
my ($ip1, $ip2) = @ARGV;
my $timeout = 1;
my $thread = "";
my $ip = new Net::IP ("$ip1 - $ip2") || die;
my $ping = new Net::Ping ("icmp") || die;
function job{
if ( $ping->ping($ip->ip(), $timeout) ) {
$db=Mysql->Connect("127.0.0.1","scaner","root","root");
$db->SelectDB("ping")->Query('INSERT INTO `ping`(`ip_address`) VALUES (`"'.$ip->ip().'"`)');
}
}
do {
$thread=threads->create(\&job());
} while (++$ip);
foreach my $t (@threads) {
$t->join();
}
$ping->close();
В perl я ничего не знаю, исправьте пожалуйста ошибочки
Пользователь добавил сообщение 19 Января 2017, 19:09:22:
Вот работающий многопоточный пингер:
#!/usr/bin/perl -w
use Net::IP;
use Net::Ping;
use threads;
use DBI;
my ($ip1, $ip2) = @ARGV;
my $timeout = 1;
my $thread = "";
my $ip = new Net::IP ("$ip1 - $ip2") || die;
my $ping = new Net::Ping ("icmp") || die;
sub job{
if ( $ping->ping($ip->ip(), $timeout) ) {
$db=DBI->connect("DBI:mysql:scaner:127.0.0.1","root","root");
$db->do('INSERT INTO `ping`(`ip_address`) VALUES ("'.$ip->ip().'")');
print($ip->ip);
}
}
do {
$thread=threads->create(\&job)->join();
} while (++$ip);
$ping->close();
Пользователь добавил сообщение 20 Января 2017, 16:34:54:
Многопоточка в том примере не работала(оказывается). А в этом она работает, но в бд попадает только первый(в диапазоне)&пингующийся ip
#!/usr/bin/perl -w
use Net::IP;
use Net::Ping;
use threads;
use DBI;
my ($ip1, $ip2) = @ARGV;
my $ip = new Net::IP ("$ip1 - $ip2") || die;
my $ping = new Net::Ping ("icmp") || die;
my $timeout=1;
my @threads;
sub job{
if ( $ping->ping($ip->ip(), $timeout) ) {
my $db=DBI->connect("DBI:mysql:scaner:127.0.0.1","root","root");
$db->do('INSERT INTO `ping`(`ip`) VALUES ("'.$ip->ip().'")');
print($ip->ip()."\n");
}
print("scaned: ".$ip->ip()."\n");
}
do {
push @threads,threads->create(\&job);#->join();
} while (++$ip);
foreach my $t (@threads) {
$t->join();
}
$ping->close();