]> WPIA git - gigi.git/blob - src/org/cacert/gigi/util/DNSUtil.java
31fb1d6e2e88e00cc855e554cf520f748142cd4f
[gigi.git] / src / org / cacert / gigi / util / DNSUtil.java
1 package org.cacert.gigi.util;
2
3 import java.util.Arrays;
4 import java.util.Hashtable;
5
6 import javax.naming.Context;
7 import javax.naming.NamingException;
8 import javax.naming.directory.Attribute;
9 import javax.naming.directory.Attributes;
10 import javax.naming.directory.InitialDirContext;
11
12 public class DNSUtil {
13
14     private static InitialDirContext context;
15     static {
16         Hashtable<String, String> env = new Hashtable<String, String>();
17         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
18         try {
19             context = new InitialDirContext(env);
20         } catch (NamingException e) {
21             e.printStackTrace();
22         }
23
24     }
25
26     public static String[] getNSNames(String name) throws NamingException {
27         Attributes dnsLookup = context.getAttributes(name, new String[] {
28                 "NS"
29         });
30         return extractTextEntries(dnsLookup.get("NS"));
31     }
32
33     public static String[] getTXTEntries(String name, String server) throws NamingException {
34         Hashtable<String, String> env = new Hashtable<String, String>();
35         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
36         env.put(Context.AUTHORITATIVE, "true");
37         env.put(Context.PROVIDER_URL, "dns://" + server);
38         InitialDirContext context = new InitialDirContext(env);
39         try {
40
41             Attributes dnsLookup = context.getAttributes(name, new String[] {
42                     "TXT"
43             });
44             return extractTextEntries(dnsLookup.get("TXT"));
45         } finally {
46             context.close();
47         }
48
49     }
50
51     private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
52         if (nsRecords == null) {
53             return new String[] {};
54         }
55         String[] result = new String[nsRecords.size()];
56         for (int i = 0; i < result.length; i++) {
57             result[i] = (String) nsRecords.get(i);
58         }
59         return result;
60     }
61
62     public static String[] getMXEntries(String domain) throws NamingException {
63         Attributes dnsLookup = context.getAttributes(domain, new String[] {
64                 "MX"
65         });
66         return extractTextEntries(dnsLookup.get("MX"));
67     }
68
69     public static void main(String[] args) throws NamingException {
70         if (args[0].equals("MX")) {
71             System.out.println(Arrays.toString(getMXEntries(args[1])));
72         } else if (args[0].equals("NS")) {
73             System.out.println(Arrays.toString(getNSNames(args[1])));
74         } else if (args[0].equals("TXT")) {
75             System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));
76         }
77     }
78
79 }