I have this a code that I got help with for another task. I since tried to modify it to work on this task.
I need someones expertise to modify it slightly and I am not sure where to start or yet fully understand the logic.
I am trying to get a script to read my m-names.txt which has lots of
167.0.0.0/8
168.0.0.0/8
192.0.0.0/8
I need to strip the / part and only use the subnet address:
167.0.0.0
Then feed it into a cli called getobjectlst.exe with a -a flag that puts the subnet address from m-names.txt
This produces a report that looks like:
"167.227.31.14" "brs2002_204" "Server" "Static" "dc.dk.sark.com"
"167.227.31.15" "brs2005_284" "Server" "Static" "dc2.dk.sark.com"
"167.227.31.16" "brs2003" "Server" "Static" "dc4.dk.sark.com"
I am intrested in the 4th field entry value and how many (count) they are per $subnet=
I get a report on how many types etc... works great,
But I need it to also do another task, when I run this script I could run into a senerio like this:
Error 48: This subnet does not exist.
146.149.0.0
getobjectlst.exe :146.149.0.0: Error code = 48
If I get an message like that, I need the script to engage in another routine;
If that subnet has that error 48" this subnet does not exist" then and run another cli called "getsubnetlst.exe" like so
./getsubnetlst.exe -u Xxx -p Xxx -a 146.149.0.0 -t netwrok -o rich
This will produce relatively the same output as in the first code:
"East" "146.149.1.0" "N" "" "146.149.0.0" " " " " "255.255.255.128"
"West-Subnet" "146.149.16.0" "Y" "" "146.149.0.0" " " " " "255.255.255.252"
"North Subnet" "146.149.16.128" "Y" "" "146.149.0.0" " " " " "255.255.255.240"
"Asia D-NAT" "146.149.22.0" "Y" "" "146.149.0.0" " Japan" " " "255.255.255.0"
Then I need to run the same cli getobjectlst.exe and reference the subnet address in the second whitespace(146.149.1.0) for each one that It reports like on the above script on line 11
$ ./getobjectlst.exe -u Xxx-p Xxx -a 146.149.16.0 -o rich
"146.149.16.1" "srv114096srv" "Server" "Static" "chase.com"
"146.149.16.2" "srv114097srv" "Server" "Static" "chase.com"
For the report, I need it to be outputed as csv so I can import it into a spreadsheet, I envision it like so
( never mind on the header, I will create those in excel, but wanted to show.
Subnet Static DHCP Unused
146.149.16.0 363 0 57
I guess the output could be like this, then I will copy/paste it.
146.149.16.0,363,0,157
Then loop and do it all until its done.
Thanks for your help in advance !
This is what I have thus far, but it does not work right. I am not a perl expert so any help would be awesome !
Thanks
#!perl
open(my $log, ">log-subnet.txt") or die "Could not open log: $!\n";
##### Step 1, read subnets
open(my $in, "<m-names2.txt") or die "Could not open m-names.txt: $!\n";
while(<$in>) {
next unless /(.*?)\/(.*)$/;
my $subnet = $1;
print "Checking $subnet\n";
my @dnsoptions = `./getobjectlst.exe -u Xxx-p Xxx -a $subnet -o rich`;
my %counts;
foreach my $line (@dnsoptions) {
my @f = split/"\s+"/, $line;
$counts{$f[3]}++;
}
elsif ($line =~ /^\s*Error 48: This subnet does not exist.=([^\r\n]+)/) {
my @subnetpart2 = `./getsubnetlst.exe -u Xxx -p Xxx -a $subnet -t netwrok -o rich`;
my @f = split/"\s+"/, $line;
$counts{$f[3]}++;
}
printf $log "%s,%d,%d,%d\n", $subnet, ($counts{Static} or 0), ($counts{DHCP} or 0), ($counts{Unused} or 0);
close($log);