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");
18 // env.put(Context.AUTHORITATIVE, "true");
19 // env.put(Context.PROVIDER_URL, "dns://ns.dyn.dogcraft.de");
21 context = new InitialDirContext(env);
22 } catch (NamingException e) {
28 public static String[] getNSNames(String name) throws NamingException {
29 Attributes dnsLookup = context.getAttributes(name, new String[] {
32 return extractTextEntries(dnsLookup.get("NS"));
35 public static String[] getTXTEntries(String name, String server) throws NamingException {
36 Hashtable<String, String> env = new Hashtable<String, String>();
37 env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
38 env.put(Context.AUTHORITATIVE, "true");
39 env.put(Context.PROVIDER_URL, "dns://" + server);
40 InitialDirContext context = new InitialDirContext(env);
42 Attributes dnsLookup = context.getAttributes(name, new String[] {
46 return extractTextEntries(dnsLookup.get("TXT"));
49 private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
50 if (nsRecords == null) {
51 return new String[] {};
53 String[] result = new String[nsRecords.size()];
54 for (int i = 0; i < result.length; i++) {
55 result[i] = (String) nsRecords.get(i);
60 public static String[] getMXEntries(String domain) throws NamingException {
61 Attributes dnsLookup = context.getAttributes(domain, new String[] {
64 return extractTextEntries(dnsLookup.get("MX"));
67 public static void main(String[] args) throws NamingException {
68 if (args[0].equals("MX")) {
69 System.out.println(Arrays.toString(getMXEntries(args[1])));
70 } else if (args[0].equals("NS")) {
71 System.out.println(Arrays.toString(getNSNames(args[1])));
72 } else if (args[0].equals("TXT")) {
73 System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));