1、dnsjava
雖然原本想直接用 JNDI 來實作 DNS 的部份,但受限到有些東西實在不知道該如何下手
所以目前還是先用 dnsjava 來實作~。
這裡的第一個例子先從如何用一個網域名稱查詢該域名的 IP 開始:
package tw.org.iii.cosa.dns; import org.xbill.DNS.*; public class DnsMain { public static void main(String[] args) { try { System.out.println("Start querying DNS."); Lookup lookUpAgent = new Lookup("yahoo.com", Type.ANY); // Print the DNS server used by dnsjava String[] resolvers = ResolverConfig.getCurrentConfig().servers(); for(int i=0 ; i<resolvers.length ; i++) { System.out.println("Resolver's default: " + resolvers[i]); } // Send DNS query lookUpAgent.run(); Record [] records = lookUpAgent.getAnswers(); for(int i=0 ; i<records.length ; i++) { System.out.println("Records: " + records[i]); } System.out.println("Searching complete."); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
第 9 行先宣告一個 Lookup 的物件,Lookup 物件是 dnsjava 中用來送 DNS query 的類別
在初始化時同時也指定了查詢的內容,這裡是要查 yahoo.com,查詢所有的 DNS 記錄(包含 A、MX 等)
然後因為 Lookup 預設會取系統設定的 DNS Server 來作為發送的對象
所以在第 11~15 行先印一下它使用的 DNS Server。
第 18 行執行發送 DNS query,,並且在 19 行透過 getAnswers() 取得 DNS Server 的回應。
(實際上 run() 本身就會回應 String[] 來表示 DNS 查詢的回應,不過我習慣這樣寫 XD)
印出來的結果如下:
Start searching DNS. Resolver's default: 8.8.8.8 Records: yahoo.com. 1677 IN MX 1 mta6.am0.yahoodns.net. Records: yahoo.com. 1677 IN MX 1 mta7.am0.yahoodns.net. Records: yahoo.com. 1677 IN MX 1 mta5.am0.yahoodns.net. Records: yahoo.com. 506 IN A 209.191.122.70 Records: yahoo.com. 506 IN A 72.30.38.140 Records: yahoo.com. 506 IN A 98.139.183.24 Records: yahoo.com. 172495 IN NS ns6.yahoo.com. Records: yahoo.com. 172495 IN NS ns1.yahoo.com. Records: yahoo.com. 172495 IN NS ns8.yahoo.com. Records: yahoo.com. 172495 IN NS ns5.yahoo.com. Records: yahoo.com. 172495 IN NS ns3.yahoo.com. Records: yahoo.com. 172495 IN NS ns4.yahoo.com. Records: yahoo.com. 172495 IN NS ns2.yahoo.com. Searching complete.
另外如果 DNS Server 不想用系統上預設的 DNS Server
可以透過指定 Resolver 的方式來強制指定 Lookup 要發送的對象
例如:
Lookup lookUpAgent = new Lookup("cosa.iii.org.tw", Type.ANY); // Initial a DNS resolver Resolver resolv = new SimpleResolver("8.8.8.8"); lookUpAgent.setResolver(resolv);如此在 Lookup.run() 執行時,dnsjava 就會去指定的 DNS server 問資料了。
沒有留言:
張貼留言