#!/usr/bin/perl use warnings; use strict; my %domains; my @domain_array = qw(ebay.com paypal.com americanbank.com usbank.com americangreetings.com); my @bad_domains; $domains{$_} = undef for @domain_array; my $tuple = qr'[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]'; open my $log_domain, "logdata" or die "$!\n"; my ($host, $spf, $dkim, $ip); while (<$log_domain>) { ($host) = $_ =~ /domain=([\w\.]+?)\s/;#find regex for domain ($spf) = $_ =~ /spf=([0-4])\s/; #find regex for spf1 ($dkim) = $_ =~ /dkim=([0-4])\s/; #find regex for dkim1 ($ip) = $_ =~ /ip=(($tuple\.){3}$tuple)\s/; if (exists $domains{$host}) { $domains{$host}{counter}++; $domains{$host}{"spf$spf"}++; $domains{$host}{"dkim$dkim"}++; $domains{$host}{ip}{$ip} = undef; } else { push (@bad_domains , $host); } } close ($log_domain); my @stats = qw(dkim0 dkim1 dkim2 dkim3 dkim4 spf0 spf1 spf2 spf3 spf4); print "Domain, \"Domain Count\" "; print ucfirst($_).' ' for (@stats, 'IP'); print "\n"; foreach my $host (keys %domains) { print "$host,"; print $domains{$host}{$_} || 0,',' for ("counter",@stats); print keys %{$domains{$host}{ip}} ? (join ',', keys %{$domains{$host}{ip}}) : 'none'; print "\n"; } print "The total amount of domains that we don't care about is ". scalar @bad_domains."\n";