利用阿里云解析DDNS动态解析的java源代码
一、环境
现在的公网IP越来越少,先判断自己环境的IP是否为动态的公网IP
然后你只需要在阿里云有一个域名,如果新购买注册的,先在阿里云控制台手动添加一次解析记录
因为代码未做新记录的检测判断
由于本人为java初学者,参考了很多文献,不足之处请留言,
编写软件IntelliJ IDEA,这个随个人爱好
最后测试代码无问题之后导出jar包放入电脑中定时执行或者其他执行方式,这样就能达到动态解析的效果,
你的域名就指向最新的IP地址了
二、源代码
1、pom.xml
com.aliyun aliyun-java-sdk-core 4.0.3 com.alibaba fastjson 1.2.47
2、Start.java
public class Start {public static String regionId = "default"; //地域ID 默认public static String accessKeyId = "改为你的AccessKeyId";//阿里云生成的AccessKeyIdpublic static String accessKeySecret = "改为你的AccessKeySecret";//阿里云生成的AccessKeySecretpublic static String RecordId; //解析记录IDpublic static void main(String[] args) {String nowIP = GetIP.getNowIP();//调用getNowIP()System.out.println("你的当前公网IP:"+nowIP);String aliIP = GetIP.getAliIP();//调用getAliIP()System.out.println("阿里云解析的IP:"+aliIP);if (!nowIP.equals(aliIP)) {Update.UpdateIP(nowIP);//调用UpdateIP()} else {System.out.println("未获取到新的IP地址!不需要更改!");}}
}
3、GetIP.java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;public class GetIP {public static String getNowIP(){URL url;try {url = new URL("http://2019.ip138.com/ic.asp");//获取当前公网IP的网址try {URLConnection con = url.openConnection();//创建一个连接con.setReadTimeout(2000);//读取时限2秒con.setConnectTimeout(2000);//连接时限2秒//缓存读取到的内容BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));List html =new ArrayList();//把内容存入List集合中while(reader.readLine()!=null){html.add(reader.readLine());}reader.close();//关闭读取流con.connect();//关闭连接String str = html.get(html.size()-1).toString();//获取最后一行包含IP的内容return str.substring(str.indexOf("[")+1,str.indexOf("]"));//返回[]内的IP地址} catch (IOException e) {e.printStackTrace();}} catch (MalformedURLException e) {e.printStackTrace();}return "";}public static String getAliIP(){DefaultProfile profile = DefaultProfile.getProfile(Start.regionId,Start.accessKeyId,Start.accessKeySecret);IAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);request.setDomain("alidns.aliyuncs.com");request.setVersion("2015-01-09");request.setAction("DescribeDomainRecords");//此处为阿里API源代码,只需修改value为你需要解析购买的域名即可request.putQueryParameter("DomainName", "value");try {CommonResponse response = client.getCommonResponse(request);String str =response.getData();JSONObject jsonObject = JSON.parseObject(str);JSONObject domainRecords =jsonObject.getJSONObject("DomainRecords");JSONArray record =domainRecords.getJSONArray("Record");JSONObject result = record.getJSONObject(0);Start.RecordId=result.getString("RecordId");//取得更改需要的解析记录IDreturn result.getString("Value");//取得已经存在的IP地址} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return "";}
}
4、Update.java
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;public class Update {public static void UpdateIP(String IP) {String newIP = IP;DefaultProfile profile = DefaultProfile.getProfile(Start.regionId,Start.accessKeyId,Start.accessKeySecret);IAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);request.setDomain("alidns.aliyuncs.com");request.setVersion("2015-01-09");request.setAction("UpdateDomainRecord");request.putQueryParameter("RecordId",Start.RecordId);//放入参数解析记录IDrequest.putQueryParameter("RR", "*");request.putQueryParameter("Type", "A");request.putQueryParameter("Value",newIP);//放入参数新的IP地址try {CommonResponse response = client.getCommonResponse(request);if (response.getData().length()>0){System.out.println("修改IP成功!");}else {System.out.println("修改IP失败!");}} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
