Perl Multi-thread Ping

Доброго времени суток.
Есть некий скрипт на perl

#!/usr/bin/perl

use threads;
use Net::Ping;
 
$subnet='10.170.2.';
@hosts=(1..254);
 
sub subnetting {
  my $ip00 = shift @_;
  my @ip01 = @_;
  my @ipaddr;

  for (my $k=0; $k<=$#ip01; $k++) {
    $ipaddr[$k]=$ip00.$ip01[$k];
  }
  return @ipaddr;
}
 
sub startping {
  my $host = $_;
  my $p = Net::Ping->new("icmp",1,1);
    if ($p->ping($host)) {
      print "$host\n";
    }
  $p->close();
}
 
sub startthreads {
  foreach (@ipaddr) {
    sleep(0);
    push(@pinged_addr, threads->create("startping", $_));
  }

  foreach (@pinged_addr) {
    $_->join();
  }
}
 
@ipaddr = subnetting($subnet, @hosts);
startthreads(@ipaddr);

Корректно работает только от root`а. От простого пользователя всегда выдает список ошибок. Выставление прав в 0777 результата не дает. Подскажите как исправить данное недоразумение.

Некоторые параметры пинга

Некоторые параметры пинга могут требовать прав рута

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Ну я как бы в курсе.

Ну я как бы в курсе. Потому и прошу помощи.

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

If the "icmp" protocol is

If the "icmp" protocol is specified, the ping() method sends an icmp echo message to the remote host, which is what the UNIX ping program does. If the echoed message is received from the remote host and the echoed information is correct, the remote host is considered reachable. Specifying the "icmp" protocol requires that the program be run as root or that the program be setuid to root.
ссыль

Иными словами, нужно заменить "icmp" на "tcp", "udp" или "syn". Скрипт рабочий!

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

.

icmp - это raw sockets, соотв. требуют привилегий суперпользователя. Поэтому или запускать от рута, или chmod 04755; chown root, или менять протокол на udp к примеру. Как еще один тупой вариант - можно из приложения запускать ping (на нем suid стоит :)).

Да??? Хм ... покручу на

Да??? Хм ... покручу на досуге. Спасибо за идею.

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".