加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl dns record check

发布时间:2020-12-16 00:19:24 所属栏目:大数据 来源:网络整理
导读:说明: 主要用于获取及检查DNS server 信息,确保其安全可靠运行。 根据使用需求可以调整sub 函数来取得想要的信息。 ? #!/usr/bin/perl? use?strict;? ? use?Net::DNS;? ? #my?$domain=$ARGV[0];? #my?$dns_server=$ARGV[1];? my?$domain= "google.com" ;?
 说明: 主要用于获取及检查DNS server 信息,确保其安全可靠运行。
 根据使用需求可以调整sub 函数来取得想要的信息。

 

?

 
 
  1. #!/usr/bin/perl?
  2. use?strict;?
  3. ?
  4. use?Net::DNS;?
  5. ?
  6. #my?$domain=$ARGV[0];?
  7. #my?$dns_server=$ARGV[1];?
  8. my?$domain="google.com";?
  9. my?$dns_server="ns2.google.com";?
  10. ?
  11. #PRES();?
  12. Separate?("List?A_Record");?
  13. A_Record();?
  14. ?
  15. Separate?("List?SOA_Record");?
  16. SOA_Record();?
  17. ?
  18. #Check_open_dns();?
  19. Separate?("List?MX_Record");?
  20. MX_Records();?
  21. ?
  22. Separate?("List?NS_Record");?
  23. NS_Records();?
  24. ?
  25. Separate?("List?SPF_Record");?
  26. SPF_Record();?
  27. ?
  28. Separate?("List?AXFR_Record");?
  29. #AXFR();?
  30. ?
  31. sub?Separate?{?
  32. ????????my?$key=shift;?
  33. ????????print?"n";?
  34. ????????print?"---------------------?$key?----------------------------nn";?
  35. }?
  36. ?
  37. sub?A_Record?{?
  38. ????????my?@hosts=qw(www?ftp?mail?dns?vpn?sslvpn);?
  39. ????????my?$res?=?Net::DNS::Resolver->new;?
  40. ????????foreach?my?$host?(@hosts)?{?
  41. ????????????????my?$query_A=$res->search("$host.$domain");?
  42. ?
  43. ????????????????if?($query_A)?{?
  44. ????????????????????????foreach?my?$rr?($query_A->answer)?{?
  45. ????????????????????????next?unless?$rr->type?eq?"A";?
  46. ????????????????????????print?"$host.$domain:?";?
  47. ????????????????????????print?$rr->address,?"n";?
  48. ????????????????}?
  49. ????????????????}?else?{?
  50. ????????????????????????warn?"Unable?to?obtain?A?record?:?",?$res->errorstring,?"n";?
  51. ????????????????}?
  52. ????????}?
  53. }?
  54. ?
  55. ?
  56. sub?AXFR?{?
  57. ?????????print?"AXFR?records?:n";?
  58. ?????????my?$res??=?Net::DNS::Resolver->new;?
  59. ?????????$res->nameservers("$dns_server");?
  60. ?????????my?@zone?=?$res->axfr("$domain");?
  61. ?????????foreach?my?$rr?(@zone)?{?
  62. ??????????????????$rr->print;?
  63. ?????????}?
  64. }?
  65. ?
  66. sub?PRES?{?
  67. ????????use?Net::DNS::Resolver::Recurse;?
  68. ????????my?$pres?=?Net::DNS::Resolver::Recurse->new;?
  69. ????????$pres->tcp_timeout(2);?
  70. ????????$pres->udp_timeout(2);?
  71. ????????$pres->debug(1);?
  72. ????????my?@root_ns?=?map?$_?.?'.root-servers.net',?'a'..'m';?
  73. ????????$pres->hints(@root_ns);?
  74. ????????my?$packet?=?$pres->query_dorecursion($domain,?"NS");?
  75. ????????print?"Parent?Nameservers:n";?
  76. ????????foreach?my?$pns?($packet->additional)?{?
  77. ???????????????????print?$pns->name,"(",?$pns->rdatastr,")n";?
  78. ????????}?
  79. }?
  80. ?
  81. sub?SOA_Record?{?
  82. ????????print?"SOA?record:?n";?
  83. ????????my?$res=Net::DNS::Resolver->new;?
  84. ????????my?$soa_query?=?$res->query($domain,?'SOA');?
  85. ????????if?($soa_query)?{?
  86. ????????????????($soa_query->answer)[0]->print,?"n";?
  87. ????????}?
  88. ????????else??{?
  89. ????????????print?"SOA?record?fail.?Result:n",$res->errorstring;?
  90. ????????}?
  91. }?
  92. ?
  93. sub?Check_open_dns?{?
  94. ????????print?"Checking?recursion?(open?dns?server)...n";?
  95. ????????my?@nservers?=?qw(ns.xtera-ip.com.cn);?
  96. ????????my?$rres?=?Net::DNS::Resolver->new(?
  97. ????????????????nameservers?=>?[@nservers],?
  98. ????????????????recurse?????=>?1,?
  99. ????????????????debug???????=>?0,?
  100. ????????????????);?
  101. ????????my?$dest;?
  102. ????????my?$r_query?=?$rres->query($dest,"A");?
  103. ????????my?@dest_ips=();?
  104. ????????if?($r_query)?{?
  105. ????????????????foreach?my?$rrr?($r_query->answer)?{?
  106. ????????????????????????next?unless?$rrr->type?eq?"A";?
  107. ????????????????????????print?"Recursive?lookups?are?ENABLED?in?",$rres->nameserver(),":?",$rrr->address,?"n";?
  108. ????????????????}?
  109. ????????}?else?{?
  110. ????????????????warn?"OK.?Recursive?queries?are?not?answered.??Result:?",?$rres->errorstring,?"n";?
  111. ????????}?
  112. }?
  113. ?
  114. sub?MX_Records?{?
  115. ????????print?"MX?Records?is?:n";?
  116. ????????my?$res??=?Net::DNS::Resolver->new;?
  117. ????????my?@mx???=?mx($res,?$domain);?
  118. ????????if?(@mx)?{?
  119. ???????????????foreach?my?$rr?(@mx)?{?
  120. ????????????????????print?$rr->preference,?"?",?$rr->exchange,?"n";?
  121. ??????????????}?
  122. ????????}?else?{?
  123. ???????????????warn?"Can't?find?MX?records?for?$domain:?",?"n";?
  124. ????????}?
  125. }?
  126. ?
  127. sub?NS_Records?{?
  128. ????????print?"NS?Records?:?n";?
  129. ????????my?$res???=?Net::DNS::Resolver->new;?
  130. ????????my?$query?=?$res->query("$domain",?"NS");?
  131. ????????if?($query)?{?
  132. ????????????foreach?my?$rr?(grep?{?$_->type?eq?'NS'?}?$query->answer)?{?
  133. ????????????????????print?$rr->nsdname,?"n";?
  134. ????????????}?
  135. ????????}?
  136. ????????else?{?
  137. ????????????warn?"query?failed:?",?"n";?
  138. ????????}?
  139. }?
  140. ?
  141. sub?Reverse_MX?{?
  142. ????????my?$ip;?
  143. ????????print?"nChecking?Reverse?MX?Records?...n";?
  144. ????????my?$mx_res?=?Net::DNS::Resolver->new();?
  145. ????????my?$mxanswer?=?$mx_res->query($ip->reverse_ip(),'PTR');?
  146. ????????if($mxanswer)?{?
  147. ??????????????foreach?my?$mrr?(grep?{$_->type?eq?"PTR"?}?$mxanswer->answer)?{?
  148. ???????????????print?$ip->reverse_ip(),"?PTR?",$mrr->ptrdname,"n";?
  149. ???????????????}?
  150. ?
  151. ?
  152. ?????????}?else?{?
  153. ??????????print?"MX?records?not?foundn";?
  154. ?????????}?
  155. }?
  156. ?
  157. sub?SPF_Record?{?
  158. ????????print?"SPF?Records?is?:?n";?
  159. ????????#my?$domain=shift;?
  160. ????????my?$res=Net::DNS::Resolver->new();?
  161. ????????my?$spf_query=$res->query($domain,"TXT");?
  162. ????????if?($spf_query)?{?
  163. ????????????????foreach?my?$rr?($spf_query->answer)?{?
  164. ????????????????????????print?"SPF?record?ok:?",$rr->txtdata,?"n";?
  165. ????????????????}?
  166. ????????}?
  167. ????????else?{?
  168. ????????????????warn?"unable?to?get?SPF?record?:?",?"n";???????}?
  169. }?

脚本输出结果:
root@ubuntu:~/script# perl dns_check_google.pl

--------------------- List A_Record ----------------------------

www.google.com: 74.125.128.99
www.google.com: 74.125.128.103
www.google.com: 74.125.128.104
www.google.com: 74.125.128.105
www.google.com: 74.125.128.106
www.google.com: 74.125.128.147
Unable to obtain A record : NXDOMAIN
mail.google.com: 74.125.128.17
mail.google.com: 74.125.128.18
mail.google.com: 74.125.128.19
mail.google.com: 74.125.128.83
Unable to obtain A record : NXDOMAIN
vpn.google.com: 64.9.224.68
vpn.google.com: 64.9.224.69
vpn.google.com: 64.9.224.70
Unable 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.com
20 alt1.aspmx.l.google.com
30 alt2.aspmx.l.google.com
40 alt3.aspmx.l.google.com
50 alt4.aspmx.l.google.com

--------------------- List NS_Record ----------------------------

NS Records :
ns4.google.com
ns1.google.com
ns2.google.com
ns3.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 ----------------------------

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读