Avatar billede Slettet bruger
12. november 2000 - 11:28 Der er 8 kommentarer og
1 løsning

Net::Ping

Er der nogen der har haft held med at bruge Net::Ping modulet til PERL. Jeg ønsker at pinge en server inde i mit perl-script.

Nogen der har erfaring med dette?
Avatar billede hall Nybegynder
12. november 2000 - 11:34 #1
Hvilken maskine ligger din perl på. (Hvis linux ligger modulet ping der allerede).
Avatar billede hall Nybegynder
12. november 2000 - 11:34 #2
ellers download på www.perl.org
Avatar billede hall Nybegynder
12. november 2000 - 11:34 #3
eller linux.org
Avatar billede Slettet bruger
12. november 2000 - 11:36 #4
Har prøvet på en Linux Server..... men kan ikke få det til at virke.. ??
Avatar billede Slettet bruger
12. november 2000 - 11:37 #5
Men har også en w2k webserver kørende med ActivePerl, har endnu ikke prøvet på denne !
Avatar billede erikjacobsen Ekspert
12. november 2000 - 12:03 #6
Hvis du må køre ping på din unix plejer man at anbefale noget i denne retning:

$rslt = `ping www.jubii.dk`;
if ($rslt =~ /active/ ) {
    print \"Jubii kan naas\\n\";
}  else {
    print \"Jubii er vaek\\n\";
}
 
Avatar billede mcgemam Nybegynder
13. november 2000 - 09:50 #7
Ovenfornævnte metode som erikjacobsen benytter, er et shell-escape... Dette er dyrt (ressourcemæssigt) at lave, og desuden ikke portabel kode !

her er et stykke grimt, hurtigt sammenbixet kode der virker med Net::Ping på en FreeBSD æske. Jeg har inkluderet Time::HiRes modulet for at kunne udføre meget præcise sekundberegninger...

Om det virker på en Linux / NT æske også aner jeg ikke.

PS: du skal være root for at benytte icmp metoden !

------------------ snip -------------------------

#!/usr/bin/perl

use Net::Ping;
use Time::HiRes qw( gettimeofday tv_interval usleep);  ## for nøjagtig tidsberegning


$p = Net::Ping->new(\"icmp\");

$host=\"www.chaos.dk\";
$ant=10; $wait=1;
$min=10000; $max=0; $pk=0; $sum=0;
for ($i=1; $i<=$ant; $i++)
{
    $a=[gettimeofday];
    if ($p->ping($host, 1))
    {
      $b= 1000 * tv_interval( $a,[gettimeofday]);
      #print \" ($b ms)\\n\";
      print STDERR \".\";
      $sum=$sum+$b; $pk++;
      $max=$b if ($b>$max);
      $min=$b if ($b<$min);
    }
    else
    {
      print STDERR \"!\";
    }
    usleep($wait*1000);
}
print STDERR \"\\n\";
if ($pk == 0)
{
  print STDERR \"$host is NOT pingable\\n\";
}
else
{
  $avg=sprintf(\"%5.3f\",$sum/$pk);
  $pl=int(($ant-$pk)/$ant*100);
  print STDERR \"--- $host ping statistics ---\\n\";
  print STDERR \"$ant packets transmitted, $pk packets received, $pl% packet loss\\n\";
  print STDERR \"round-trip min/avg/max = $min/$avg/$max ms\\n\";
}
$p->close();                                                                   

------------------ end snip -----------------------
Avatar billede erikjacobsen Ekspert
13. november 2000 - 09:54 #8
Det er nemlig lige det, mc, man skal være root. En shell-escape er dyr, men den
virker - hvis ellers ping-kommandoen virker. Uden icmp kan net::ping i princippet
også virke (med udp), men det har vi jo åbenbart problemer med.
Avatar billede mcgemam Nybegynder
13. november 2000 - 10:15 #9
nu gik spørgsmålet på Net::Ping og ikke på ping generelt!

\"thaggren\" specificerede ikke platform og rettigheder, så derfor nævnte jeg blot at icmp metoden kræver root rettigheder (man kan jo lave Denial Of Service sager med store icmp pakker, så det er rimeligt nok syntes jeg)

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester