阿里云DDNS服务

阿里云DDNS服务提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档搭建自己的 aliyunDDNS 服务 Java 前言由于运营商分配的公网 ip 经常变化 需要域名绑定 而不喜欢向日葵的 DDNS 服务 然后跟据官网 demo 自己写了一个记录一下一 DDNS 是什么 域名动态解析服务二 使用步骤 1 引入依赖代码如下 示例 dependency groupId com aliyun groupId amp dependency

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

搭建自己的aliyunDDNS服务Java


前言

由于运营商分配的公网ip经常变化,需要域名绑定,而不喜欢向日葵的DDNS服务,然后跟据官网demo自己写了一个记录一下


一、DDNS是什么?

域名动态解析服务

二、使用步骤

1.引入依赖

代码如下(示例):

 <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.0</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.6.32</version> </dependency> 

2.编写对应获取ip代码

代码如下(示例):

 / * 获取主域名的所有解析记录列表 */ private DescribeDomainRecordsResponse describeDomainRecords(DescribeDomainRecordsRequest request, IAcsClient client){ 
      try { 
      // 调用SDK发送请求 return client.getAcsResponse(request); } catch (ClientException e) { 
      e.printStackTrace(); // 发生调用错误,抛出运行时异常 throw new RuntimeException(); } } //如果没有查询到记录,可以用这个方法新增一条解析记录 private AddDomainRecordResponse addDomainRecord(AddDomainRecordRequest request,IAcsClient client){ 
      try { 
      // 调用SDK发送请求 return client.getAcsResponse(request); } catch (ClientException e) { 
      e.printStackTrace(); // 发生调用错误,抛出运行时异常 throw new RuntimeException(); } } / * 修改解析记录 */ 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)); } 

3.获取当前ip,也可以用其他的ip网站,研究发现还是官方demo推荐的好用一点

 / * 获取当前主机公网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; } 

4.对应执行代码,可以写一个定时器定时执行,log_print可以打印返回的数据自己做处理

 public static void checkIP() { 
      // 设置鉴权参数,初始化客户端 DefaultProfile profile = DefaultProfile.getProfile( "cn-",//这里可以百度阿里云的地域id "您的AccessKey ID",// 您的AccessKey ID "您的AccessKey Secret");// 您的AccessKey Secret IAcsClient client = new DefaultAcsClient(profile); DDNS ddns = new DDNS(); // 查询指定二级域名的最新解析记录 DescribeDomainRecordsRequest describeDomainRecordsRequest = new DescribeDomainRecordsRequest(); // 主域名 describeDomainRecordsRequest.setDomainName(".com"); // 主机记录 describeDomainRecordsRequest.setRRKeyWord("www"); // 解析记录类型 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+"-------------------------------"); System.out.println("-------------------------------当前阿里云记录IP为:"+recordsValue+"-------------------------------"); if(!currentHostIP.equals(recordsValue)){ 
      System.out.println("记录不一致开始修改ip"); // 修改解析记录 UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest(); // 主机记录 updateDomainRecordRequest.setRR("www"); // 记录ID updateDomainRecordRequest.setRecordId(recordId); // 将主机记录值改为当前主机IP updateDomainRecordRequest.setValue(currentHostIP); // 解析记录类型 updateDomainRecordRequest.setType("A"); UpdateDomainRecordResponse updateDomainRecordResponse = ddns.updateDomainRecord(updateDomainRecordRequest, client); // log_print("updateDomainRecord",updateDomainRecordResponse); } } } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204918.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:14
下一篇 2026年3月19日 下午7:14


相关推荐

  • vmware虚拟机连接网络[通俗易懂]

    vmware虚拟机连接网络[通俗易懂]当安装好vm虚拟机后,进入系统,发现打开无法打开网页,可参考如下步骤进行配置1.vm打开虚拟及设置,选择网络适配器,网络连接选择自定义,VMnet8(NAT模式)2.vm虚拟机打开编辑->虚拟网络编辑器,选择VMnet8,虚拟机会自动分配子网IP3.打开网络和共享中心(win10为例)4.启动虚拟机,即可上网…

    2022年6月15日
    26
  • 全网最全的卷积运算过程

    全网最全的卷积运算过程卷积运算 1 卷积核的通道 也叫滤波器 的个数得与被卷积的图片通道数相同 eg 输入图片是 1024 1024 3 即通道数为 3 那么每个卷积核得有 3 个通道 2 卷积核做的是线性运算 核上的每个值与它滑动到的对应位置上的值相乘 然后把这些值相加 eg 默认滑动步长为 1 用右边的 9 个格放到原图上 9 个 9 个的不重复的走先从左向右滑 输出的第一个值为 2 1 8 0 9 2 1 1 2 0 8 1 7 3 7 0 2 0 50 输出的第二个值为 8 1 9 0 1 2 2 1 8 0 3 1 7 3 2 0

    2026年3月17日
    2
  • 请求转发和重定向区别

    请求转发和重定向区别一 转发和重定向区别详解作为一名程序员 特别是 javaweb 开发的程序员 在使用 servlet jsp 的时候 我们必须要知道实现页面跳转的两种方式的区别和联系 即转发和重定向的区别 RequestDispa forward 方法只能将请求转发给同一个 WEB 应用中的组件 而 HttpServletR sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源

    2026年3月19日
    3
  • type-c是pd_type c pd 什么意思

    type-c是pd_type c pd 什么意思第一部分包含:一、二、三、四第二部分包含:五、六目录一、Type-C简介以及历史二、Type-CPort的DataRole、PowerRole三、Type-C的Data/PowerRole识别协商/AltMode四、如何进行数据链路的切换五、相关参数/名词/状态解释六、PD协议简介一、Type-C简介以及历史自1998年…

    2026年4月15日
    2
  • 自学silverlight 5.0

    这是一个silverlight游戏:http://keleyi.com/keleyi/phtml/silverlight/接了个单子,非要用Silverlight5来作一个项目,之前从来没接触过这

    2021年12月23日
    54
  • acwing-361. 观光奶牛(0/1分数规划)「建议收藏」

    acwing-361. 观光奶牛(0/1分数规划)「建议收藏」给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。输出这个最大值。注意:数据保证至少存在一个环。输入格式第一行包含两个整数 L 和 P。接下来 L 行每行一个整数,表示 f[i]。再接下来 P 行,每行三个整数 a,b,t[i],表示点 a 和 b 之间存在一条边,边的权值为 t[i]。输出格式输出一个数表示结果,保留两位小数。数据范围2≤L≤1000,2≤P≤50

    2022年8月10日
    7

发表回复

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

关注全栈程序员社区公众号