]> WPIA git - gigi.git/blob - src/org/cacert/gigi/util/DNSUtil.java
816b24731bc576635096e30ab691b1fb9e5e6b9b
[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
40         Attributes dnsLookup = context.getAttributes(name, new String[] {
41             "TXT"
42         });
43
44         return extractTextEntries(dnsLookup.get("TXT"));
45     }
46
47     private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
48         if (nsRecords == null) {
49             return new String[] {};
50         }
51         String[] result = new String[nsRecords.size()];
52         for (int i = 0; i < result.length; i++) {
53             result[i] = (String) nsRecords.get(i);
54         }
55         return result;
56     }
57
58     public static String[] getMXEntries(String domain) throws NamingException {
59         Attributes dnsLookup = context.getAttributes(domain, new String[] {
60             "MX"
61         });
62         return extractTextEntries(dnsLookup.get("MX"));
63     }
64
65     public static void main(String[] args) throws NamingException {
66         if (args[0].equals("MX")) {
67             System.out.println(Arrays.toString(getMXEntries(args[1])));
68         } else if (args[0].equals("NS")) {
69             System.out.println(Arrays.toString(getNSNames(args[1])));
70         } else if (args[0].equals("TXT")) {
71             System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));
72         }
73     }
74
75 }