Есть 2 сервера
FreeBSD 7
Linux Centos
Есть Perl-скрипт многопоточного пингования машин в локальной сети (около 3000).
Пинг организован через Net::Ping
В результате - на машине с FreeBSD все работает как положено, а на машине с Linux срипт практически все машины считает активными.
Грубо говоря - net::ping при работе выдает - либо 0 либо 1 (нет пинга на компьютер или есть).
Так вот - в Линуксе на 95% машин - выдает 1 - т.е. компьютер включен - но это не так.
Какие есть соображения?
Спасибо!
Net::Ping выдает разные результаты в FreeBSD и Linux (perl)
Модератор: Модераторы разделов
-
RealSwift
- Сообщения: 2
-
svary
- Сообщения: 49
- ОС: Linux FC-9
-
RealSwift
- Сообщения: 2
Re: Net::Ping выдает разные результаты в FreeBSD и Linux (perl)
Код функции пинга:
sub Ping_it{
my ($work_count, $miss_count);
my $t = shift;
my $pinger = Net::Ping->new();
while (my $target = $RequestQ->dequeue){
$work_count ++;
my $retval = 0;
$verbose and print "Child $target started\n";
$pr1=$pinger->ping($target);
if($pr1) {
# PING! Throw it in the FIFO
$verbose and print "Found $target!\n";
$retval=1
}
else {
#warn "Thread $t $target: $!\n";
$verbose and print "No response from $target\n";
$retval=0;
$miss_count++;
}
$ResultQ->enqueue(formatdatetime("YYYY-MM-DD hh:mm:ss", time).'|'.$target . "=" . $retval);
threads->yield();
$verbose and print "Child $target exiting\n";
}
$pinger->close();
$ResultQ->enqueue("Thread $t processed $work_count, missed $miss_count");
}
Из командной строки ping не пингует выключенные машины.
sub Ping_it{
my ($work_count, $miss_count);
my $t = shift;
my $pinger = Net::Ping->new();
while (my $target = $RequestQ->dequeue){
$work_count ++;
my $retval = 0;
$verbose and print "Child $target started\n";
$pr1=$pinger->ping($target);
if($pr1) {
# PING! Throw it in the FIFO
$verbose and print "Found $target!\n";
$retval=1
}
else {
#warn "Thread $t $target: $!\n";
$verbose and print "No response from $target\n";
$retval=0;
$miss_count++;
}
$ResultQ->enqueue(formatdatetime("YYYY-MM-DD hh:mm:ss", time).'|'.$target . "=" . $retval);
threads->yield();
$verbose and print "Child $target exiting\n";
}
$pinger->close();
$ResultQ->enqueue("Thread $t processed $work_count, missed $miss_count");
}
Из командной строки ping не пингует выключенные машины.
-
isvroot
- Сообщения: 31
- ОС: Windows Vista
Re: Net::Ping выдает разные результаты в FreeBSD и Linux (perl)
У себя в сети недавно организовывал проверку айпишников с помощью Perl NET::Ping on Debian Lenny 5,0 , все работает коректно:
Вот цыкл который печатает айпшник если он пингуется, если не пингуется, то не печатает.
................
for ($ip=1;$ip<256;$ip++){
my $alive = ping(host => "172.228.160.$ip");
print ONLI "\192.168.1.$ip" if $alive;
$No++ if $alive;};
......................
Вот цыкл который печатает айпшник если он пингуется, если не пингуется, то не печатает.
................
for ($ip=1;$ip<256;$ip++){
my $alive = ping(host => "172.228.160.$ip");
print ONLI "\192.168.1.$ip" if $alive;
$No++ if $alive;};
......................
Windows жжёт