700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 阿里云 腾讯云----域名DDNS云解析到动态IP

阿里云 腾讯云----域名DDNS云解析到动态IP

时间:2023-11-23 08:56:22

相关推荐

阿里云 腾讯云----域名DDNS云解析到动态IP

DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上。

本教程详细介绍如何使用阿里云Alibaba Cloud SDK for Java实现动态域名解析(DDNS),腾讯云教程参见本文底部,此外这两大平台还支持API方式更新DNS,见文章底部。

前提条件

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

使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见阿里云开发工具包(SDK)。

<dependencies><!-- /artifact/com.aliyun/aliyun-java-sdk-core --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.3</version></dependency><!-- /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.v0109.DescribeDomainRecordsRequest;import com.aliyuncs.alidns.model.v0109.DescribeDomainRecordsResponse;import com.aliyuncs.alidns.model.v0109.UpdateDomainRecordRequest;import com.aliyuncs.alidns.model.v0109.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 .HttpURLConnection;import .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(){// 这里使用第三方接口获取本地IPString jsonip = "/";// 接口返回结果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 = pile(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 SecretIAcsClient client = new DefaultAcsClient(profile);DDNS ddns = new DDNS();// 查询指定二级域名的最新解析记录DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest();// 主域名describeDomainRecordsRequest.setDomainName("");// 主机记录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);// 记录IDString recordId = record.getRecordId();// 记录值String recordsValue = record.getValue();// 当前主机公网IPString currentHostIP = ddns.getCurrentHostIP();System.out.println("-------------------------------当前主机公网IP为:"+currentHostIP+"-------------------------------");if(!currentHostIP.equals(recordsValue)){// 修改解析记录UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest();// 主机记录updateDomainRecordRequest.setRR("ddnstest");// 记录IDupdateDomainRecordRequest.setRecordId(recordId);// 将主机记录值改为当前主机IPupdateDomainRecordRequest.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": "","recordId": "1846657850481xxxx","rR": "ddnstest","type": "A","value": "1.1.1.1","tTL": 600,"line": "default","status": "ENABLE","locked": false,"weight": 1}]}-------------------------------当前主机公网IP为:123.123.123.123--------------------------------------------------------------updateDomainRecord-------------------------------{"requestId": "08DC052F-7DF7-4451-8214-8489EC15D96A","recordId": "1846657850481xxxx"}

转载自 阿里云SDK:

实现动态域名解析DDNS - Java SDK - 阿里云/document_detail/141482.html

阿里云API更新DNS:

修改解析记录 - 云解析 DNS - 阿里云/document_detail/29774.htm

阿里云 OpenAPI 开发者门户https://next./document/Alidns/-01-09/UpdateDomainRecord

腾讯云API 更新DNS :

更新动态 DNS 记录 - DNSPod 服务与支持/api/5f562b21e75cf42d25bf68b6/

DNSPod 修改记录 - API 文档 - 文档中心 - 腾讯云1.接口描述接口请求域名:。修改记录默认接口请求频率限制:500次/秒。推荐使用APIExplorer/document/product/1427/56157

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。