1 package org.cacert.gigi.util;
3 import java.util.Arrays;
4 import java.util.Hashtable;
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;
12 public class DNSUtil {
14 private static InitialDirContext context;
16 Hashtable<String, String> env = new Hashtable<String, String>();
17 env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
19 context = new InitialDirContext(env);
20 } catch (NamingException e) {
26 public static String[] getNSNames(String name) throws NamingException {
27 Attributes dnsLookup = context.getAttributes(name, new String[] {
30 return extractTextEntries(dnsLookup.get("NS"));
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);
41 Attributes dnsLookup = context.getAttributes(name, new String[] {
44 return extractTextEntries(dnsLookup.get("TXT"));
51 private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
52 if (nsRecords == null) {
53 return new String[] {};
55 String[] result = new String[nsRecords.size()];
56 for (int i = 0; i < result.length; i++) {
57 result[i] = (String) nsRecords.get(i);
62 public static String[] getMXEntries(String domain) throws NamingException {
63 Attributes dnsLookup = context.getAttributes(domain, new String[] {
66 return extractTextEntries(dnsLookup.get("MX"));
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])));