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.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.