#!/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