LINUX.ORG.RU

Net::Ping выдает разные результаты в FreeBSD и Linux (perl)


0

0

Есть 2 сервера FreeBSD 7 Linux Centos

Есть Perl-скрипт многопоточного пингования машин в локальной сети (около 3000). Пинг организован через Net::Ping В результате - на машине с FreeBSD все работает как положено, а на машине с Linux срипт практически все машины считает активными.

Грубо говоря - net::ping при работе выдает - либо 0 либо 1 (нет пинга на компьютер или есть).

Так вот - в Линуксе на 95% машин - выдает 1 - т.е. компьютер включен - но это не так.

Какие есть соображения? Спасибо!

> Так вот - в Линуксе на 95% машин - выдает 1 - т.е. компьютер включен - но это не так.

В голову приходит только то, что из под линукса пинг уходит не туда. Смотри свой перловый скрипт и прочие настройки. А если из-под линукса вручную пропинговать один из заведомо выключенных компьютеров?

Bod ★★★★
()
Ответ на: комментарий от Bod

Фунция пинга:

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");

}

Вручную пингуем - нет пинга. Не совсем понимаю, как он может уходить не туда? При каких прочих условиях может возникать такая коллизия? А также - в отношении кэширования сетевого стека - прошу также разъяснить. Спасибо.

RealSwift
() автор топика
Ответ на: комментарий от RealSwift

Если честно, я не силен в перле. Но почему не использовать готовое?
http://search.cpan.org/dist/Net-Ping/
http://search.cpan.org/~smpeters/Net-Ping-2.36/lib/Net/Ping.pm

А здесь немного о тюнинге TCP стека в Linux http://www.nestor.minsk.by/sr/2007/08/sr70815.html

Bod ★★★★
()
Ответ на: комментарий от Bod

Спасибо, но это по большому счету и используем. В результате имеем, что имеем.

RealSwift
() автор топика
Ответ на: комментарий от RealSwift

# perl -MNet::Ping -E 'say join":",Net::Ping->new("icmp")->ping("aa.bb.cc.dd",2)'
1:0:aa.bb.cc.dd
# perl -MNet::Ping -E 'say join":",Net::Ping->new("icmp")->ping("xx.yy.zz.ww",2)'
0:2:xx.yy.zz.ww

aa.bb.cc.dd — существует, xx.yy.zz.ww — нет. т.е. всё работает верно.


на всякий случай:

$Id: Ping.pm,v 1.86 2003/06/27 21:31:07 rob Exp $

$ perl --version
This is perl, v5.10.0 built for x86_64-linux-thread-multi-ld

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.