Hi all, currently i have this script that looks for IP address that is in the netmask specified in $matcher and print that line from mylogFile.log

#!/usr/bin/perl use strict; use warnings; use Net::Subnet; my $filename = 'mylogFile.log'; open(my $fh, '<:encoding(UTF-8)', $filename) or die "Could not open file '$filename' $!"; my @cidr_list = <$fh>; my $matcher = subnet_matcher qw(192.168.1.0/22); my @grepIPs = grep(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\./,@cidr_ +list); for (my $i=0; $i < scalar @grepIPs; $i++){ my $boolean = $matcher->($grepIPs[$i]); if ($boolean == 1){ print $grepIPs[$i]; } else{ print "Nothing\n"; } }

However, $grepIPS only matches lines that only have IP address specified without any other strings in that particular line.

For e.g., my script only matches lines that only has IP address:

192.168.1.2 192.168.1.3 192.168.1.4

it does not matches lines that has other strings involved as shown below:

2017-12-08 07:01:39 <my source IP> GET /course-detail.aspx id=66&catCo +lor=0 443 - 192.168.1.0 (e.g., IP) <server version etc. strings> 200 +0 0 530

What I want as my output: I want to grep only the IP addresses (not the whole line which I can't feed into my for loop to check) from the line so that I can feed it into my for loop to see if the IP is in the netmask, and if yes, I would like to print the whole line. Can anyone guide me on how I can achieve this? any response is kindly appreciated, thank you.

Sample output that I want to achieve: 2017-12-08 07:01:39 <my source IP> GET /course-detail.aspx id=66&catCo +lor=0 443 - 192.168.1.1 (e.g., IP) <server version etc. strings> 200 +0 0 530 2017-12-08 07:01:39 <my source IP> GET /course-detail.aspx id=66&catCo +lor=0 443 - 192.168.1.2 (e.g., IP) <server version etc. strings> 200 +0 0 530 2017-12-08 07:01:39 <my source IP> GET /course-detail.aspx id=66&catCo +lor=0 443 - 192.168.1.3 (e.g., IP) <server version etc. strings> 200 +0 0 530 #Note that I only want to grep IP addresses (192.168.1.1-3) that are i +n the same netmask specified in $matcher

In reply to How to grep matching IP address from a log file? by dotowwxo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.