
说明: 主要用于获取及检查DNS server 信息,确保其安全可靠运行。 根据使用需求可以调整sub 函数来取得想要的信息。
@H_403_13@#!/usr/bin/perl use strict; @H_403_13@ use Net::DNS; @H_403_13@ #my $domain=$ARGV[0]; @H_403_13@#my $dns_server=$ARGV[1]; my $domain="Google.com"; @H_403_13@my $dns_server="ns2.Google.com"; @H_403_13@#PRES(); Separate ("List A_Record"); @H_403_13@A_Record(); @H_403_13@Separate ("List SOA_Record"); SOA_Record(); @H_403_13@ #Check_open_dns(); @H_403_13@Separate ("List MX_Record"); MX_Records(); @H_403_13@ Separate ("List NS_Record"); @H_403_13@NS_Records(); @H_403_13@Separate ("List SPF_Record"); SPF_Record(); @H_403_13@ Separate ("List AXFR_Record"); @H_403_13@#AXFR(); @H_403_13@sub Separate { my $key=shift; @H_403_13@ print "\n"; print "--------------------- $key ----------------------------\n\n"; @H_403_13@} @H_403_13@sub A_Record { my @hosts=qw(www ftp mail dns vpn sslvpn); @H_403_13@ my $res = Net::DNS::Resolver->new; foreach my $host (@hosts) { @H_403_13@ my $query_A=$res->search("$host\.$domain"); @H_403_13@ if ($query_A) { foreach my $rr ($query_A->answer) { @H_403_13@ next unless $rr->type eq "A"; print "$host\.$domain: "; @H_403_13@ print $rr->address, "\n"; } @H_403_13@ } else { warn "Unable to obtain A record : ", $res->errorstring, "\n"; @H_403_13@ } } @H_403_13@} @H_403_13@ sub AXFR { @H_403_13@ print "AXFR records :\n"; my $res = Net::DNS::Resolver->new; @H_403_13@ $res->nameservers("$dns_server"); my @zone = $res->axfr("$domain"); @H_403_13@ foreach my $rr (@zone) { $rr->print; @H_403_13@ } } @H_403_13@ sub PRES { @H_403_13@ use Net::DNS::Resolver::Recurse; my $pres = Net::DNS::Resolver::Recurse->new; @H_403_13@ $pres->tcp_timeout(2); $pres->udp_timeout(2); @H_403_13@ $pres->deBUG(1); my @root_ns = map $_ . '.root-servers.net', 'a'..'m'; @H_403_13@ $pres->hints(@root_ns); my $packet = $pres->query_dorecursion($domain, "NS"); @H_403_13@ print "Parent nameservers:\n"; foreach my $pns ($packet->additional) { @H_403_13@ print $pns->name,"(", $pns->rdatastr,")\n"; } @H_403_13@} @H_403_13@sub SOA_Record { print "SOA record: \n"; @H_403_13@ my $res=Net::DNS::Resolver->new; my $soa_query = $res->query($domain, 'SOA'); @H_403_13@ if ($soa_query) { ($soa_query->answer)[0]->print, "\n"; @H_403_13@ } else { @H_403_13@ print "SOA record fail. Result:\n",$res->errorstring; } @H_403_13@} @H_403_13@sub Check_open_dns { print "Checking recursion (open dns server)...\n"; @H_403_13@ my @nservers = qw(ns.xtera-ip.com.cn); my $rres = Net::DNS::Resolver->new( @H_403_13@ nameservers => [@nservers], recurse => 1, @H_403_13@ deBUG => 0, ); @H_403_13@ my $dest; my $r_query = $rres->query($dest,"A"); @H_403_13@ my @dest_ips=(); if ($r_query) { @H_403_13@ foreach my $rrr ($r_query->answer) { next unless $rrr->type eq "A"; @H_403_13@ print "Recursive lookups are ENABLED in ",$rres->nameserver(),": ",$rrr->address, "\n"; } @H_403_13@ } else { warn "OK. Recursive querIEs are not answered. Result: ", $rres->errorstring, "\n"; @H_403_13@ } } @H_403_13@ sub MX_Records { @H_403_13@ print "MX Records is :\n"; my $res = Net::DNS::Resolver->new; @H_403_13@ my @mx = mx($res, $domain); if (@mx) { @H_403_13@ foreach my $rr (@mx) { print $rr->preference, " ", $rr->exchange, "\n"; @H_403_13@ } } else { @H_403_13@ warn "Can't find MX records for $domain: ", "\n"; } @H_403_13@} @H_403_13@sub NS_Records { print "NS Records : \n"; @H_403_13@ my $res = Net::DNS::Resolver->new; my $query = $res->query("$domain", "NS"); @H_403_13@ if ($query) { foreach my $rr (grep { $_->type eq 'NS' } $query->answer) { @H_403_13@ print $rr->nsdname, "\n"; } @H_403_13@ } else { @H_403_13@ warn "query Failed: ", "\n"; } @H_403_13@} @H_403_13@sub Reverse_MX { my $ip; @H_403_13@ print "\nChecking Reverse MX Records ...\n"; my $mx_res = Net::DNS::Resolver->new(); @H_403_13@ my $mxanswer = $mx_res->query($ip->reverse_ip(),'PTR'); if($mxanswer) { @H_403_13@ foreach my $mrr (grep {$_->type eq "PTR" } $mxanswer->answer) { print $ip->reverse_ip()," PTR ",$mrr->ptrdname,"\n"; @H_403_13@ } @H_403_13@ } else { @H_403_13@ print "MX records not found\n"; } @H_403_13@} @H_403_13@sub SPF_Record { print "SPF Records is : \n"; @H_403_13@ #my $domain=shift; my $res=Net::DNS::Resolver->new(); @H_403_13@ my $spf_query=$res->query($domain,"TXT"); if ($spf_query) { @H_403_13@ foreach my $rr ($spf_query->answer) { print "SPF record ok: ",$rr->txtdata, "\n"; @H_403_13@ } } @H_403_13@ else { warn "unable to get SPF record : ", "\n"; } @H_403_13@}
脚本输出结果:root@ubuntu:~/script# perl dns_check_Google.pl--------------------- List A_Record ----------------------------www.Google.com: 74.125.128.99www.Google.com: 74.125.128.103www.Google.com: 74.125.128.104www.Google.com: 74.125.128.105www.Google.com: 74.125.128.106www.Google.com: 74.125.128.147Unable to obtain A record : NXDOMAINmail.Google.com: 74.125.128.17mail.Google.com: 74.125.128.18mail.Google.com: 74.125.128.19mail.Google.com: 74.125.128.83Unable to obtain A record : NXDOMAINvpn.Google.com: 64.9.224.68vpn.Google.com: 64.9.224.69vpn.Google.com: 64.9.224.70Unable to obtain A record : NXDOMAIN--------------------- List SOA_Record ----------------------------SOA record:Google.com. 86050 IN SOA ns1.Google.com. dns-admin.Google.com. ( 2013015000 ; Serial 7200 ; Refresh 1800 ; Retry 1209600 ; Expire 300 ) ; Minimum TTL--------------------- List MX_Record ----------------------------MX Records is :10 aspmx.l.Google.com20 alt1.aspmx.l.Google.com30 alt2.aspmx.l.Google.com40 alt3.aspmx.l.Google.com50 alt4.aspmx.l.Google.com--------------------- List NS_Record ----------------------------NS Records :ns4.Google.comns1.Google.comns2.Google.comns3.Google.com--------------------- List SPF_Record ----------------------------SPF Records is :SPF record ok: v=spf1 include:_netblocks.Google.com include:_netblocks6.Google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all--------------------- List AXFR_Record ----------------------------总结
以上是内存溢出为你收集整理的perl dns record check全部内容,希望文章能够帮你解决perl dns record check所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)