in reply to novice falls

The regexp you're using to pick off the IP address is going to give you false positives on garbage input. As written, it will match on
... 999.999.999.999
and a few other bogus IPs. There are regexps that will correctly match only valid IP addresses. Some are even findable via Super Search. Try searching for titles that contain "match" and "IP".

Replies are listed 'Best First'.
Re^2: IP Address Regexp and Resolve
by tadman (Prior) on Oct 11, 2001 at 05:28 UTC
    Hopefully if you're parsing a log file you won't get this sort of garbage input, but it is better to be safe than sorry. Instead of writing the regexp to end all regexps, which many have made a noble effort of doing, maybe using this admittedly slack one with some post-processing is the best bet.
    use Socket; # ... if ($line =~ /\b(\d{1,3}(?:\d{1,3}){3}\b/) { if (my $in_addr = inet_aton($1)) { if ($name = gethostbyname($in_addr, AF_INET)) { # ... } } }
    inet_aton will reject any bad input, such as 999.999.999.999, meaning that gethostbyname will not even try to resolve these.

    As a side-note, gethostbyname can take a very, very long time to return input if the name-servers for that address block are down. If you are trying to bulk-resolve, you might want to use a tool which does this more efficiently, such as dnsfilter from the DJB DNS package. A Perl solution is also available from CPAN.