利用阿里云解析DDNS动态解析的java源代码

一、环境

现在的公网IP越来越少,先判断自己环境的IP是否为动态的公网IP
然后你只需要在阿里云有一个域名,如果新购买注册的,先在阿里云控制台手动添加一次解析记录
因为代码未做新记录的检测判断
由于本人为java初学者,参考了很多文献,不足之处请留言,
编写软件IntelliJ IDEA,这个随个人爱好
最后测试代码无问题之后导出jar包放入电脑中定时执行或者其他执行方式,这样就能达到动态解析的效果,
你的域名就指向最新的IP地址了

二、源代码

1、pom.xml

<dependencies>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.0.3</version>
            </dependency>
            
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
</dependencies>

2、Start.java

public class Start {
	    
	    public static String regionId = "default"; //地域ID 默认
	    public static String accessKeyId = "改为你的AccessKeyId";//阿里云生成的AccessKeyId
	    public static String accessKeySecret = "改为你的AccessKeySecret";//阿里云生成的AccessKeySecret
	    public static String RecordId;  //解析记录ID
	
	    public 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");//取得更改需要的解析记录ID
            return 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);//放入参数解析记录ID
        request.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();
        }
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值