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

Hi, I am trying to check whether a particular port is open or closed. I use the following method, i found some code and modified according to the requirment. Is the following one is right way to check :
#!/usr/bin/perl use IO::Socket; $socket = IO::Socket::INET->new(Proto=>"udp", PeerPort=>"162", PeerAdd +r=>"192.168.1.1") || 1000; if($socket==1000) { print "Port Closed"; } else { print "Port Open"; } close($socket);
Thanks.

Replies are listed 'Best First'.
Re: Checking Port Open or Close
by JavaFan (Canon) on May 14, 2010 at 09:39 UTC
    That's not the right way. You can only know whether a remote UDP port is "open" or "closed" (I assume you mean with "open" is "I don't get a rejection message when trying to connect to it", and "closed" the opposite) by sending something to it. Remember, UDP is a connection less protocol. Creating the socket just sets up your local site - success here just means it's ready to send something for you. It doesn't say anything about the remote site. That is, if IO::Socket::INET->new() fails, doesn't mean that "192.168.1.1:162" isn't 'open'. Nor does it mean that "192.168.1.1:162" is 'open' if IO::Socket::INET->new() succeeds.
Re: Checking Port Open or Close
by ikegami (Patriarch) on May 14, 2010 at 04:52 UTC
    I don't know what you're after, but I just wanted to point out that
    $socket = IO::Socket::INET->new(Proto=>"udp", PeerPort=>"162", PeerAdd +r=>"192.168.1.1") || 1000; if($socket==1000)
    is a weird and bad way of writing
    $socket = IO::Socket::INET->new(Proto=>"udp", PeerPort=>"162", PeerAdd +r=>"192.168.1.1"); if($socket)
Re: Checking Port Open or Close
by ungalnanban (Pilgrim) on May 14, 2010 at 04:28 UTC