rleyba828
asked on
Need assistance modifying an existing PERL script to compute IP Address metrics
Hi Team,
Just need some assistance modifying an existing PERL script to accommodate new fields I have to eventually import to our mysql database.
1. I have a raw file ip_search.csv which contains a "Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK"
2. After being processed by the PERL script below, the output now has "Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK", "START_IP_RANGE", "END_IP_RANGE", "START_DECIMAL", "END_DECIMAL" where the START and END Decimals are the decimal equivalent of the IP addresses (INET_ATON function).
3. The PERL script that is doing that is this:
4. My new customer now sends me a raw file which contains less info, (base IP is missing) but still needs similar fields (with a couple extra) as the output:
a. New source files looks like this --> "Device_Name", 'IP_ADDRESS", "MASK"
b. but the resulting csv output would need to look like this:
"Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK", "MASK_CIDR", "START_IP_RANGE", "END_IP_RANGE", "START_DECIMAL", "END_DECIMAL"
Would appreciate if someone could just help me modify the existing PERL script listed above so the new version can also compute the BASE IP and the CIDR value, based on initial IP address and mask?
Thanks very much.
Just need some assistance modifying an existing PERL script to accommodate new fields I have to eventually import to our mysql database.
1. I have a raw file ip_search.csv which contains a "Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK"
[me@mypc]# cat ip_search.csv
Firewall_A,10.1.40.3,10.1.40.0,24
Firewall_B,10.8.40.1,10.8.40.0,24
Firewall_C,10.8.31.3,10.8.31.0,28
Firewall_D,10.8.31.1,10.8.31.0,28
2. After being processed by the PERL script below, the output now has "Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK", "START_IP_RANGE", "END_IP_RANGE", "START_DECIMAL", "END_DECIMAL" where the START and END Decimals are the decimal equivalent of the IP addresses (INET_ATON function).
[me@mypc]# ./FirewallIPRange
Firewall_A,10.1.40.3,10.1.40.0,24,10.1.40.1,10.1.40.254,167847937,167848190
Firewall_B,10.8.40.1,10.8.40.0,24,10.8.40.1,10.8.40.254,168306689,168306942
Firewall_C,10.8.31.3,10.8.31.0,28,10.8.31.1,10.8.31.14,168304385,168304398
Firewall_D,10.8.31.1,10.8.31.0,28,10.8.31.1,10.8.31.14,168304385,168304398
3. The PERL script that is doing that is this:
[me@mypc]# cat FirewallIPRange
#!/usr/bin/perl
use strict;
use warnings;
use Net::IP;
use Socket;
open my $csv, '<', 'ip_search.csv' or die "failed to open 'ip_search.csv' $!";
while( my $record = <$csv>) {
chomp $record;
my($network, $cidr) = (split(/,/, $record))[-2,-1];
my $lan = Net::IP->new("$network/$cidr");
my @first = split(/\./, $lan->ip);
$first[-1]++;
my $first_ip = join('.', @first);
my @last = split(/\./, $lan->last_ip);
$last[-1]--;
my $last_ip = join('.', @last);
my $first = unpack("N", inet_aton($first_ip) );
my $last = unpack("N", inet_aton($last_ip) );
print join(',', $record, $first_ip, $last_ip, $first, $last), "\n";
}
close $csv;
4. My new customer now sends me a raw file which contains less info, (base IP is missing) but still needs similar fields (with a couple extra) as the output:
a. New source files looks like this --> "Device_Name", 'IP_ADDRESS", "MASK"
[me@mypc]# cat ip_search_new.csv
Firewall_A,10.1.40.3,24
Firewall_B,10.8.40.1,24
Firewall_C,10.8.31.3,28
Firewall_D,10.8.31.1,28
b. but the resulting csv output would need to look like this:
"Device_Name", 'IP_ADDRESS", "BASE_IP", "MASK", "MASK_CIDR", "START_IP_RANGE", "END_IP_RANGE", "START_DECIMAL", "END_DECIMAL"
[me@mypc]# ./FirewallIPRangeNEW
Firewall_A,10.1.40.3,10.1.40.0,24,255.255.255.0,10.1.40.1,10.1.40.254,167847937,167848190
Firewall_B,10.8.40.1,10.8.40.0,24,255.255.255.0, 10.8.40.1,10.8.40.254,168306689,168306942
Firewall_C,10.8.31.3,10.8.31.0,28,255.255.255.240,10.8.31.1,10.8.31.14,168304385,168304398
Firewall_D,10.8.31.1,10.8.31.0,28,255.255.255.240, 10.8.31.1,10.8.31.14,168304385,168304398
Would appreciate if someone could just help me modify the existing PERL script listed above so the new version can also compute the BASE IP and the CIDR value, based on initial IP address and mask?
Thanks very much.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER