Forum Webscript.Ru
Программирование => Perl => Тема начата: StealtH2606 от 26 Сентября 2004, 15:24:33
-
Вообщем такая ситуевина, нужно пинговать несколько определенных хостов в сети.
Есть код:
if(&ping($host)){
print "Yes\\n";
}else{
print "No\\n";}
sub ping($host)
{
use Net::Ping;
$p=Net::Ping->new();
$p->hires();
($ret, $duration, $ip) = $p->ping($host, 5.5);
if($ret)
{
for ($i=0;$i<=$num_times;$i++)
{
$p->hires();
($ret, $duration, $ip) = $p->ping($host, 5.5);
$ping_time+=$duration;
}
$ping_time=$ping_time/$i;
$p->close();
return 1;
}else {
$p->close();
return 0;
}
так вот при $host=\'реально существующий хост\' функция возвращает 0, в обратном случае тоже самое.
Второй вопрос:
при ответе пингуемого хоста время пинга $ping_time имеет очень жуткие значения, т.е. в 3-5 раз больше чем при пинге системной командой.
Помогите плиз, люди добрые, может где-то ошибочка или недоглядел чего.
И еще вопрос :), как с помощью перла определить тип прокси сервера(SOCKS4, SOCKS4a, SOCKS5), буду сильно признателен если подкините кусочек кода или ссылку на литературу :D
-
Уважаемый StealtH. Я проанализировал приведенный код. Вообще-то все правильно.
Ну не может эта функция возвращать 0 при существующем хосте. Возможно этот хост недоступен. Не забудьте проинициализировать переменную $num_times=... А время пинга завышено скорее всего из-за, что
Net::Ping->new([$proto [, $def_timeout [, $bytes]]]);
Create a new ping object. All of the parameters are optional. $proto specifies the protocol to use when doing a ping. The current choices are ``tcp\'\', ``udp\'\' or ``icmp\'\'. The default is ``udp\'\'.
Попробуй изменить new(icmp,1.5). Должен шустрить быстрее
-
With the "tcp" protocol the ping() method attempts to establish a connection to the remote
host\'s echo port. If the connection is successfully established, the remote host is considered reachable.