Zate has asked for the wisdom of the Perl Monks concerning the following question:
Hello,
I am trying to write a simple bit of code to take the output from NMAP::Parser on what ports are open on a host, and then determine if a HTTP or HTTPS server runs on that port, if it is then get me the Type of Server (via the HTTP HEAD command).
I am using IO::Socket::INET for the HTTP and IO::Socket::SSL for the HTTPS portion. The problem I have is that the program tends to get "stuck" sometimes on non HTTP or HTTPS ports.
Is there a way, at a very low level to quickly see if something speaks HTTP ? (or HTTPS) before doing the HEAD request? I am using NMAP to get what ports are open on a box, I am thinking i need something to tell what of those speaks HTTP before asking it what kind of server its running.
I tried using alarm() to "die" if it got hung but wasnt sure how to make the sub exit and return instead of dieing.
Maybe you could get better control of the hung processes if you ran them as forked children?
On a completely different tack, perhaps you should go high level and use LWP instead of IO::Socket to see if HTTP/S communication is possible. Might make your problem much simpler to manage.