实现动态域名解析DDNS

实现动态域名解析DDNShttps://help.aliyun.com/document_detail/431629.html?spm=5176.smartservice_service_robot_chat_new.0.0.26bef625nZZyid实现动态域名解析DDNS更新时间:2022-09-2722:14

大家好,欢迎来到IT知识分享网。实现动态域名解析DDNS"

https://help.aliyun.com/document_detail/431629.html?spm=5176.smartservice_service_robot_chat_new.0.0.26bef625nZZyid

 

实现动态域名解析DDNS

更新时间:2022-09-27 22:14

我的收藏

本教程详细介绍如何使用Alibaba Cloud SDK for Java实现动态域名解析(DDNS)。

前提条件

在使用本教程前,请确保已完成以下操作:

  • 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
  • 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见阿里云开发工具包(SDK)。
     
    <dependencies> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-alidns --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-alidns</artifactId> <version>2.0.10</version> </dependency> </dependencies>

代码示例

本文操作示例主要以代码形式体现,具体代码如下:

 
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsRequest; import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse; import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordRequest; import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 动态域名解析 */ public class DDNS { /** * 获取主域名的所有解析记录列表 */ private DescribeDomainRecordsResponse describeDomainRecords(DescribeDomainRecordsRequest request, IAcsClient client){ try { // 调用SDK发送请求 return client.getAcsResponse(request); } catch (ClientException e) { e.printStackTrace(); // 发生调用错误,抛出运行时异常 throw new RuntimeException(); } } /** * 获取当前主机公网IP */ private String getCurrentHostIP(){ // 这里使用jsonip.com第三方接口获取本地IP String jsonip = "https://jsonip.com/"; // 接口返回结果 String result = ""; BufferedReader in = null; try { // 使用HttpURLConnection网络请求第三方接口 URL url = new URL(jsonip); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); in = new BufferedReader(new InputStreamReader( urlConnection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } // 正则表达式,提取xxx.xxx.xxx.xxx,将IP地址从接口返回结果中提取出来 String rexp = "(\\d{1,3}\\.){3}\\d{1,3}"; Pattern pat = Pattern.compile(rexp); Matcher mat = pat.matcher(result); String res=""; while (mat.find()) { res=mat.group(); break; } return res; } /** * 修改解析记录 */ private UpdateDomainRecordResponse updateDomainRecord(UpdateDomainRecordRequest request, IAcsClient client){ try { // 调用SDK发送请求 return client.getAcsResponse(request); } catch (ClientException e) { e.printStackTrace(); // 发生调用错误,抛出运行时异常 throw new RuntimeException(); } } private static void log_print(String functionName, Object result) { Gson gson = new Gson(); System.out.println("-------------------------------" + functionName + "-------------------------------"); System.out.println(gson.toJson(result)); } public static void main(String[] args) { // 设置鉴权参数,初始化客户端 DefaultProfile profile = DefaultProfile.getProfile( "cn-qingdao",// 地域ID "your-access-key-id",// 您的AccessKey ID "your-access-key-secret");// 您的AccessKey Secret IAcsClient client = new DefaultAcsClient(profile); DDNS ddns = new DDNS(); // 查询指定二级域名的最新解析记录 DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest(); // 主域名 describeDomainRecordsRequest.setDomainName("example.com"); // 主机记录 describeDomainRecordsRequest.setRRKeyWord("ddnstest"); // 解析记录类型 describeDomainRecordsRequest.setType("A"); DescribeDomainRecordsResponse describeDomainRecordsResponse = ddns.describeDomainRecords(describeDomainRecordsRequest, client); log_print("describeDomainRecords",describeDomainRecordsResponse); List<DescribeDomainRecordsResponse.Record> domainRecords = describeDomainRecordsResponse.getDomainRecords(); // 最新的一条解析记录 if(domainRecords.size() != 0 ){ DescribeDomainRecordsResponse.Record record = domainRecords.get(0); // 记录ID String recordId = record.getRecordId(); // 记录值 String recordsValue = record.getValue(); // 当前主机公网IP String currentHostIP = ddns.getCurrentHostIP(); System.out.println("-------------------------------当前主机公网IP为:"+currentHostIP+"-------------------------------"); if(!currentHostIP.equals(recordsValue)){ // 修改解析记录 UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest(); // 主机记录 updateDomainRecordRequest.setRR("ddnstest"); // 记录ID updateDomainRecordRequest.setRecordId(recordId); // 将主机记录值改为当前主机IP updateDomainRecordRequest.setValue(currentHostIP); // 解析记录类型 updateDomainRecordRequest.setType("A"); UpdateDomainRecordResponse updateDomainRecordResponse = ddns.updateDomainRecord(updateDomainRecordRequest, client); log_print("updateDomainRecord",updateDomainRecordResponse); } } } }

运行结果

正确运行结果类似如下:

 
-------------------------------describeDomainRecords-------------------------------
{
    "requestId": "6AE588B9-FAFA-45FE-8FBE-CACB196D3539", "totalCount": 1, "pageNumber": 1, "pageSize": 20, "domainRecords": [ { "domainName": "example.com", "recordId": "1846657850481****", "rR": "ddnstest", "type": "A", "value": "1.1.XX.XX", "tTL": 600, "line": "default", "status": "ENABLE", "locked": false, "weight": 1 } ] } -------------------------------当前主机公网IP为:123.123.XX.XX------------------------------- -------------------------------updateDomainRecord------------------------------- { "requestId": "08DC052F-7DF7-4451-8214-8489EC15D96A", "recordId": "1846657850481****" }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34739.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信