
com.qiniu.android.dns.http.DnspodEnterprise Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of happy-dns Show documentation
Show all versions of happy-dns Show documentation
Qiniu Happy Dns for Android
package com.qiniu.android.dns.http;
import com.qiniu.android.dns.Domain;
import com.qiniu.android.dns.IResolver;
import com.qiniu.android.dns.NetworkInfo;
import com.qiniu.android.dns.Record;
import com.qiniu.android.dns.util.Hex;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* Created by bailong on 15/7/22.
*/
public final class DnspodEnterprise implements IResolver {
private final String id;
private final String ip;
private final SecretKeySpec key;
public DnspodEnterprise(String id, String key, String ip) {
this.id = id;
this.ip = ip;
byte[] k = new byte[0];
try {
k = key.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
throw new AssertionError(e);
}
this.key = new SecretKeySpec(k, "DES");
}
public DnspodEnterprise(String id, String key) {
this(id, key, "119.29.29.29");
}
@Override
public Record[] resolve(Domain domain, NetworkInfo info) throws IOException {
URL url = new URL("http://" + ip + "/d?ttl=1&dn=" + encrypt(domain.domain)
+ "&id=" + id);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setConnectTimeout(3000);
httpConn.setReadTimeout(6000);
int responseCode = httpConn.getResponseCode();
if (responseCode != HttpURLConnection.HTTP_OK) {
return null;
}
int length = httpConn.getContentLength();
if (length <= 0 || length > 1024) {
return null;
}
InputStream is = httpConn.getInputStream();
byte[] data = new byte[length];
int read = is.read(data);
is.close();
if (read <= 0) {
return null;
}
String response = new String(data, 0, read);
String result = decrypt(response);
String[] r1 = result.split(",");
if (r1.length != 2) {
return null;
}
int ttl;
try {
ttl = Integer.parseInt(r1[1]);
} catch (Exception e) {
return null;
}
String[] ips = r1[0].split(";");
if (ips.length == 0) {
return null;
}
Record[] records = new Record[ips.length];
long time = System.currentTimeMillis() / 1000;
for (int i = 0; i < ips.length; i++) {
records[i] = new Record(ips[i], Record.TYPE_A, ttl, time);
}
return records;
}
private String encrypt(String domain) {
try {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedString = cipher.doFinal(domain.getBytes("utf-8"));
return Hex.encodeHexString(encryptedString) + "&id=" + id;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
private String decrypt(String data) {
try {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(Hex.decodeHex(data.toCharArray()));
return new String(decrypted);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy