1 package org.cacert.gigi.ping;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.util.Arrays;
7 import java.util.LinkedList;
9 public class DNSPinger extends DomainPinger {
12 public String ping(String domain, String expToken) {
14 String[] tokenParts = expToken.split(":", 2);
16 Process p = Runtime.getRuntime().exec(new String[] {
17 "dig", "+short", "NS", domain
19 BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
21 LinkedList<String> nameservers = new LinkedList<String>();
22 while ((line = br.readLine()) != null) {
23 nameservers.add(line);
26 StringBuffer result = new StringBuffer();
27 result.append("failed: ");
28 boolean failed = nameservers.isEmpty();
30 for (String NS : nameservers) {
31 String[] call = new String[] {
32 "dig", "@" + NS, "+short", "TXT", "cacert-" + tokenParts[0] + "." + domain
34 System.out.println(Arrays.toString(call));
35 p = Runtime.getRuntime().exec(call);
36 br = new BufferedReader(new InputStreamReader(p.getInputStream()));
38 boolean found = false;
39 while ((line = br.readLine()) != null) {
44 token = line.substring(1, line.length() - 1);
45 if (token.equals(tokenParts[1])) {
52 result.append(" DIFFER;");
54 result.append(" EMPTY;");
62 return result.toString();
63 } catch (IOException e) {
65 return "Connection closed";