#!/usr/bin/env perl -w
use Net::DNS;
use DNS::ZoneParse;
use Socket;
$res = Net::DNS::Resolver->new();
my $ZONEPATH = $ARGV[0] or die "You Must specify the /full/path/to/zonefiles/domain.com\n";
my @fields = split(/\//,$ARGV[0]);
$DOMAIN = $fields[-1];
my $data_file = "/tmp/$DOMAIN.err";
open FILE, "+>$data_file" or die "can't open $data_file $!";
my $zonefile = DNS::ZoneParse->new($ZONEPATH);
my $mx_records = $zonefile->mx();
# DNS query MX records
my @mx = mx($res, $DOMAIN);
my $DNS_mx_records_size = scalar @mx;
my $mx_records_size = scalar @$mx_records;
my $mx_priority = $mx_record->{priority};
my $mx_hostname = $mx_record->{host};
if ($DNS_mx_records_size ne $mx_records_size) {
print FILE "$DOMAIN:MX:Count:$mx_records_size//Count:$DNS_mx_records_size\n";
}
foreach $mx_record (@$mx_records) {
print FILE $DOMAIN, ":MX:", $mx_record->{priority}, ":", $mx_record->{host},"//\n";
}
foreach my $record (@mx) {
print FILE "DNS:MX:", $record->preference, ":", $record->exchange, "\n";
}
close (FILE);
####
my $a_records = $zonefile->a();
# A records
foreach my $record (@$a_records) {
my $a_name = $record->{name};
$a_name =~ s/$/.$DOMAIN/g;
$a_name =~ s/\@.//g;
my $a_host = $record->{host};
my $a_name_packed_ip = gethostbyname("$a_name.$DOMAIN");
if (defined $a_name_packed_ip) {
$a_name_ip_address = inet_ntoa($a_name_packed_ip);
}
my $a_host_packed_ip = gethostbyname("$a_host");
if (defined $a_host_packed_ip) {
$a_host_ip_address = inet_ntoa($a_host_packed_ip);
}
if ($a_name_ip_address ne $a_host_ip_address) {
print FILE "$DOMAIN:A:$a_name:$a_name_ip_address//DNS:A:$a_host_ip_address\n";
}
}
####
SOMEDOMAIN.com:SOA:Serial:200912070901//DNS:SOA:Serial107082511
SOMEDOMAIN.com:SOA:Primary:ns.SOMEZONE.com.//DNS:SOA:Primary:ns.SOMEBIGMX.com
SOMEDOMAIN.com:SOA:Refresh:3600//DNS:SOA:Refresh:10800
SOMEDOMAIN.com:SOA:TTL:3600//DNS:SOA:TTL:7200
SOMEDOMAIN.com:SOA:eMail:postmaster.SOMEOTHMAIL.com.//DNS:SOA:eMail:namehost.SOMEBIGMX.com
SOMEDOMAIN.com:SOA:Expire:3600000//DNS:SOA:Expire:604800
SOMEDOMAIN.com:A:SOMEDOMAIN.com:111.111.111.11//DNS:A:222.222.22.222
SOMEDOMAIN.com:A:ftp.SOMEDOMAIN.com:111.111.111.12//DNS:A:222.222.22.222
SOMEDOMAIN.com:A:mail.SOMEDOMAIN.com:111.111.111.25//DNS:A:11.22.123.234
SOMEDOMAIN.com:A:pop.SOMEDOMAIN.com:111.111.111.35//DNS:A:11.22.123.234
SOMEDOMAIN.com:A:smtp.SOMEDOMAIN.com:111.111.111.35//DNS:A:11.22.123.234
SOMEDOMAIN.com:A:webmail.SOMEDOMAIN.com:111.111.111.45//DNS:A:11.22.123.233
SOMEDOMAIN.com:A:www.SOMEDOMAIN.com:111.111.111.11//DNS:A:222.222.22.222
SOMEDOMAIN.com:A:personalmail.SOMEDOMAIN.com:111.111.111.55//DNS:A:11.22.123.234
SOMEDOMAIN.com:CNAME:imap:111.111.111.11//DNS:CNAME:imap.IMAPMAILSVCS.net.:222.22.232.22
SOMEDOMAIN.com:CNAME:intermanager:111.111.111.65//DNS:CNAME:intermanager.SOMEOTHMAIL.com.:222.22.232.22
SOMEDOMAIN.com:CNAME:selfcare:111.111.111.75//DNS:CNAME:selfcare.SOMEOTHMAIL.com.:222.22.232.22
SOMEDOMAIN.com:MX:Count:4//Count:1
SOMEDOMAIN.com:MX:10:mx1.MXHOSTING.com.//
SOMEDOMAIN.com:MX:100:mx2.MXHOSTING.com.//
SOMEDOMAIN.com:MX:110:mx3.MXHOSTING.com.//
SOMEDOMAIN.com:MX:120:mx4.MXHOSTING.com.//
DNS:MX:10:inbound.SOMEDOMAIN.com.SOMEMAIL.net