anoopgulati has asked for the wisdom of the Perl Monks concerning the following question:

hi all , i m using perl 5.8.6 , i m working on a project where i need to develop perl code for snmp & icmp n then storing the values retrived in an ms access database ...... i hav debugged that code ...but it gives "icmp socket error ". vot shud i do ........
#!/usr/bin/perl use strict; # important pragma use warnings; # another important pragma my @hostname; @hostname = @ARGV; use Win32::ODBC; use Net::Ping; my $db = new Win32::ODBC("DSN=anoop2") || die "error connecting" ; Win32::ODBC::Error(); my @localtime= localtime (time); #CONVERT THE TIMESTAMP INTO THE #FOLLOWINGFORMAT SSMMHHMMDDYYYYPARSE THE DATA INTO #LOCALTIME ARRAY. ADD 1TO THE MONTH AS COUNT #STARTS FROM ZERO my $timenow = ($localtime[4] + 1)."/".($localtime[3])."/".($localtime[ +5]+1900)." ".$localtime[2].":".$localtime[1].":".$localtime[0]; my $p = Net::Ping->new("icmp"); $p->bind("127.0.0.1"); # Specify source interface of pings if ($p->ping(@hostname,3)) { $db->sql("insert into chk(device,pngtm,status) values('@hostname','$ +timenow','yes') ;"); $db->sql(" commit ;"); } else { $db->sql("insert into chk(device,pngtm,status) values('@hostname','$ +timenow','No') ;"); $db->sql(" commit ;"); };

Replies are listed 'Best First'.
Re: icmp socket error
by sasikumar (Monk) on Feb 07, 2005 at 11:09 UTC
    It works fine for me.

    But It requires some changes
    $p->bind("$actual ip of the source"); #This can not be a 127.0.0.1 if ($p->ping($hostname[0],3)) #You can't give a array as a first argum +ent.
    I am using windows 2000 and perl, v5.8.4




    Update: The module does not require a bind call you can always remove the bind and go ahead. It works smart.

    Thanks
    SasiKumar

      Instead you should just drop the bind() call. If the module requires it, then the module should be fixed.

      - tye        

      hi there .... i got to hear that 5.8.6 has some glitch as far as ping is concerned ....n more over i m a total novice ...in perl .... can u help me in a step by step manner ... i tried runni the code without the bind statement .... it still gives the same error
Re: icmp socket error
by sasikumar (Monk) on Feb 09, 2005 at 15:11 UTC
    hi

    Try this and revert back to me..
    #!/usr/bin/perl use strict; # important pragma use warnings; # another important pragma my @hostname; @hostname = ('any_near_by_machine'); use Net::Ping; my $p = Net::Ping->new("icmp") || die "Error in creating a new ping ob +ject" ; my $temp=$p->ping($hostname[0],3)||die "Error when i ping"; if ($temp) { print "Perfect"; } else { print "Imperfect"; }


    Thanks
    SasiKumar
      this is the error i get :Error when i ping @ line 14.... when i run ur code ..... ani ways .. i hav installed 5.8.4 now ... n i made some changes in the previous code ....i hav added print statements .... now i do get the output in the from of the added print statements ... but it still does not adds the relavent data into my access db ..... thanks AnooP
        I am having a similar problem under Windows XP and Perl 5.8.6:
        C:\>perl -de 1 Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(-e:1): 1 DB<1> use Net::Ping; DB<2> $tcp = Net::Ping->new('tcp'); DB<3> print +($tcp->ping('4.2.2.2') ? "Up\n" : "Down\n"); Up DB<4> $icmp = Net::Ping->new('icmp'); icmp socket error - at (eval 11)[C:/Perl/lib/perl5db.pl:628] line 2 DB<5> print "$]\n"; 5.008006 DB<6> q

        The code in Ping.pm getting the error is:

        socket($self->{"fh"}, PF_INET, SOCK_RAW, $self->{"proto_num"}) || croak("icmp socket error - $!");

        Raw sockets can only be opened by those running with 'root' permission (easily verified on my Linux box). However, what's the equivalent under Windows? I have an alternate id that's a full administrator, but it fairs no better. The maddening thing is that this used to work for me, but with my brand-new laptop with WinXP - it's broken.

        Does anyone have an idea how to allow a normal Windows user to open a raw socket so that icmp pings can work?

        TIA

        GreyGeek