阿里雲解析動態公網


轉自:http://blog.csdn.net/bless2015/article/details/51284259

在阿里雲上買的域名: *******.love

現在都是動態IP,每次IP變了就得從新在阿里雲後臺改。

用阿里雲解析提供的接口,可以自動修改解析的IP。

思路是每次開機輪詢IP是否變化,如果變化了,就按接口文檔提供的格式,發一個post請求實現修改。這個修改會有幾分鐘的間隔纔會生效。

這樣在家開啓這個程序,或者導出exe放啓動文件裏,開機啓動。便可以實時更新域名對應的ip地址。


關鍵代碼:

  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.io.InputStreamReader;  
  5. import java.net.InetAddress;  
  6. import java.net.URL;  
  7. import java.net.URLConnection;  
  8. import java.util.Date;  
  9. import java.util.List;  
  10.   
  11. import com.aliyun.api.AliyunClient;  
  12. import com.aliyun.api.AliyunConstants;  
  13. import com.aliyun.api.DefaultAliyunClient;  
  14. import com.aliyun.api.dns.dns20150109.request.DescribeSubDomainRecordsRequest;  
  15. import com.aliyun.api.dns.dns20150109.request.UpdateDomainRecordRequest;  
  16. import com.aliyun.api.dns.dns20150109.response.DescribeSubDomainRecordsResponse;  
  17. import com.aliyun.api.dns.dns20150109.response.UpdateDomainRecordResponse;  
  18. import com.aliyun.api.domain.Record;  
  19.   
  20. public class DemoListDomains {  
  21.     private static AliyunClient client;  
  22.   
  23.     static {  
  24.         String serverUrl = "http://dns.aliyuncs.com/";  
  25.         String accessKeyId = "yourId";  
  26.         String accessKeySecret = "yourSecret";  
  27.   
  28.         client = new DefaultAliyunClient(serverUrl, accessKeyId, accessKeySecret, AliyunConstants.FORMAT_JSON);  
  29.     }  
  30.   
  31.     public static void main(String[] args) {  
  32.           
  33.         while(true){  
  34.               
  35.             try {  
  36.                 // 獲取域名信息  
  37.                 DescribeSubDomainRecordsRequest ddi_req = new DescribeSubDomainRecordsRequest();  
  38.                 ddi_req.setTimestamp(new Date().getTime());  
  39.                 DescribeSubDomainRecordsResponse ddi_resp = new DescribeSubDomainRecordsResponse();  
  40.                 ddi_req.setSubDomain("your域名");  
  41.                 ddi_resp = client.execute(ddi_req);  
  42.   
  43.                 List<Record> list = ddi_resp.getDomainRecords();  
  44.                 boolean changed = false;  
  45.                 for (Record record : list) {  
  46.                     String ip = getMyIPOutter();// 獲得本機公網IP  
  47.   
  48.                     System.out.println("old_ip : " + record.getValue());  
  49.                     System.out.println("outter_ip : " + ip);  
  50.                     if (!ip.equals(record.getValue())) {  
  51.                         // 根據傳入參數修改解析記錄  
  52.                         UpdateDomainRecordRequest udr_req = new UpdateDomainRecordRequest();  
  53.                         udr_req.setTimestamp(new Date().getTime());  
  54.                         udr_req.setRecordId(record.getRecordId());  
  55.                         udr_req.setrR(record.getrR());  
  56.                         udr_req.setValue(ip);  
  57.                         udr_req.setType(record.getType());  
  58.                         udr_req.settTL(record.gettTL());  
  59.                         udr_req.setPriority(record.getPriority());  
  60.                         udr_req.setLine(record.getLine());  
  61.                           
  62.                         UpdateDomainRecordResponse udr_resp = new UpdateDomainRecordResponse();  
  63.                         udr_resp = client.execute(udr_req);  
  64.                         if (udr_resp.getErrorCode() == null) {  
  65.                             System.out.println("success");  
  66.                             changed = true;  
  67.                         } else {  
  68.                             System.out.println("error");  
  69.                         }  
  70.                     }  
  71.                       
  72.                 }  
  73.                 if (!changed) {  
  74.                     System.out.println("need not change");  
  75.                 }  
  76.             } catch (Exception e) {  
  77.                 e.printStackTrace();  
  78.                 System.out.println("error");  
  79.             }  
  80.             try {  
  81.                 Thread.sleep(5000);  
  82.                   
  83.             } catch (InterruptedException e) {  
  84.                 e.printStackTrace();  
  85.             }  
  86.         }  
  87.   
  88.     }  
  89.   
  90.     private static String getMyIPOutter() throws IOException {  
  91.         InputStream ins = null;  
  92.         try {  
  93.             URL url = new URL("http://1212.ip138.com/ic.asp");  
  94.             URLConnection con = url.openConnection();  
  95.             ins = con.getInputStream();  
  96.             InputStreamReader isReader = new InputStreamReader(ins, "GB2312");  
  97.             BufferedReader bReader = new BufferedReader(isReader);  
  98.             StringBuffer webContent = new StringBuffer();  
  99.             String str = null;  
  100.             while ((str = bReader.readLine()) != null) {  
  101.                 if (str.contains("您的IP是:[")) {  
  102.                     webContent.append(str);  
  103.                     break;  
  104.                 }  
  105.             }  
  106.             int start = webContent.indexOf("[") + 1;  
  107.             int end = webContent.indexOf("]");  
  108.             return webContent.substring(start, end);  
  109.         } finally {  
  110.             if (ins != null) {  
  111.                 ins.close();  
  112.             }  
  113.         }  
  114.     }  
  115.   
  116.     @SuppressWarnings("unused")  
  117.     private static String getMyIPLocal() throws IOException {  
  118.         InetAddress ia = InetAddress.getLocalHost();  
  119.         return ia.getHostAddress();  
  120.     }  
  121. }  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.List;

import com.aliyun.api.AliyunClient;
import com.aliyun.api.AliyunConstants;
import com.aliyun.api.DefaultAliyunClient;
import com.aliyun.api.dns.dns20150109.request.DescribeSubDomainRecordsRequest;
import com.aliyun.api.dns.dns20150109.request.UpdateDomainRecordRequest;
import com.aliyun.api.dns.dns20150109.response.DescribeSubDomainRecordsResponse;
import com.aliyun.api.dns.dns20150109.response.UpdateDomainRecordResponse;
import com.aliyun.api.domain.Record;

public class DemoListDomains {
	private static AliyunClient client;

	static {
		String serverUrl = "http://dns.aliyuncs.com/";
		String accessKeyId = "yourId";
		String accessKeySecret = "yourSecret";

		client = new DefaultAliyunClient(serverUrl, accessKeyId, accessKeySecret, AliyunConstants.FORMAT_JSON);
	}

	public static void main(String[] args) {
		
		while(true){
			
			try {
				// 獲取域名信息
				DescribeSubDomainRecordsRequest ddi_req = new DescribeSubDomainRecordsRequest();
				ddi_req.setTimestamp(new Date().getTime());
				DescribeSubDomainRecordsResponse ddi_resp = new DescribeSubDomainRecordsResponse();
				ddi_req.setSubDomain("your域名");
				ddi_resp = client.execute(ddi_req);

				List<Record> list = ddi_resp.getDomainRecords();
				boolean changed = false;
				for (Record record : list) {
					String ip = getMyIPOutter();// 獲得本機公網IP

					System.out.println("old_ip : " + record.getValue());
					System.out.println("outter_ip : " + ip);
					if (!ip.equals(record.getValue())) {
						// 根據傳入參數修改解析記錄
						UpdateDomainRecordRequest udr_req = new UpdateDomainRecordRequest();
						udr_req.setTimestamp(new Date().getTime());
						udr_req.setRecordId(record.getRecordId());
						udr_req.setrR(record.getrR());
						udr_req.setValue(ip);
						udr_req.setType(record.getType());
						udr_req.settTL(record.gettTL());
						udr_req.setPriority(record.getPriority());
						udr_req.setLine(record.getLine());
						
						UpdateDomainRecordResponse udr_resp = new UpdateDomainRecordResponse();
						udr_resp = client.execute(udr_req);
						if (udr_resp.getErrorCode() == null) {
							System.out.println("success");
							changed = true;
						} else {
							System.out.println("error");
						}
					}
					
				}
				if (!changed) {
					System.out.println("need not change");
				}
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("error");
			}
			try {
				Thread.sleep(5000);
				
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}

	private static String getMyIPOutter() throws IOException {
		InputStream ins = null;
		try {
			URL url = new URL("http://1212.ip138.com/ic.asp");
			URLConnection con = url.openConnection();
			ins = con.getInputStream();
			InputStreamReader isReader = new InputStreamReader(ins, "GB2312");
			BufferedReader bReader = new BufferedReader(isReader);
			StringBuffer webContent = new StringBuffer();
			String str = null;
			while ((str = bReader.readLine()) != null) {
				if (str.contains("您的IP是:[")) {
					webContent.append(str);
					break;
				}
			}
			int start = webContent.indexOf("[") + 1;
			int end = webContent.indexOf("]");
			return webContent.substring(start, end);
		} finally {
			if (ins != null) {
				ins.close();
			}
		}
	}

	@SuppressWarnings("unused")
	private static String getMyIPLocal() throws IOException {
		InetAddress ia = InetAddress.getLocalHost();
		return ia.getHostAddress();
	}
}


效果:



需要導入兩個jar:一個阿里雲官方的sdk,一個commons-logging-1.2.jar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章