]> WPIA git - gigi.git/blob - src/club/wpia/gigi/util/DNSUtil.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / src / club / wpia / gigi / util / DNSUtil.java
1 package club.wpia.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 import club.wpia.gigi.util.CAA.CAARecord;
13
14 public class DNSUtil {
15
16     private static InitialDirContext context;
17     static {
18         Hashtable<String, String> env = new Hashtable<String, String>();
19         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
20         try {
21             context = new InitialDirContext(env);
22         } catch (NamingException e) {
23             e.printStackTrace();
24         }
25
26     }
27
28     public static String[] getNSNames(String name) throws NamingException {
29         Attributes dnsLookup = context.getAttributes(name, new String[] {
30                 "NS"
31         });
32         return extractTextEntries(dnsLookup.get("NS"));
33     }
34
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);
41         try {
42
43             Attributes dnsLookup = context.getAttributes(name, new String[] {
44                     "TXT"
45             });
46             return extractTextEntries(dnsLookup.get("TXT"));
47         } finally {
48             context.close();
49         }
50
51     }
52
53     private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
54         if (nsRecords == null) {
55             return new String[] {};
56         }
57         String[] result = new String[nsRecords.size()];
58         for (int i = 0; i < result.length; i++) {
59             result[i] = (String) nsRecords.get(i);
60         }
61         return result;
62     }
63
64     public static String[] getMXEntries(String domain) throws NamingException {
65         Attributes dnsLookup = context.getAttributes(domain, new String[] {
66                 "MX"
67         });
68         return extractTextEntries(dnsLookup.get("MX"));
69     }
70
71     public static CAARecord[] getCAAEntries(String domain) throws NamingException {
72         Hashtable<String, String> env = new Hashtable<String, String>();
73         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
74         InitialDirContext context = new InitialDirContext(env);
75
76         Attributes dnsLookup = context.getAttributes(domain, new String[] {
77                 "257"
78         });
79         Attribute nsRecords = dnsLookup.get("257");
80         if (nsRecords == null) {
81             return new CAARecord[] {};
82         }
83         CAA.CAARecord[] result = new CAA.CAARecord[nsRecords.size()];
84         for (int i = 0; i < result.length; i++) {
85             byte[] rec = (byte[]) nsRecords.get(i);
86
87             result[i] = new CAA.CAARecord(rec);
88         }
89         return result;
90     }
91
92     public static void main(String[] args) throws NamingException {
93         if (args[0].equals("MX")) {
94             System.out.println(Arrays.toString(getMXEntries(args[1])));
95         } else if (args[0].equals("NS")) {
96             System.out.println(Arrays.toString(getNSNames(args[1])));
97         } else if (args[0].equals("TXT")) {
98             System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));
99         } else if (args[0].equals("CAA")) {
100             System.out.println(Arrays.toString(getCAAEntries(args[1])));
101         }
102     }
103
104 }