1、dnsjava
雖然原本想直接用 JNDI 來實作 DNS 的部份,但受限到有些東西實在不知道該如何下手
所以目前還是先用 dnsjava 來實作~。
這裡的第一個例子先從如何用一個網域名稱查詢該域名的 IP 開始:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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)
印出來的結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 要發送的對象
例如:
1 2 3 4 |
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); |
沒有留言:
張貼留言