利用阿里雲的API實現動態網域名稱解析

2021-07-25 12:23:27 字數 3108 閱讀 8502

首先在實現動態網域名稱解析之前要具備兩個條件: 第

一、你必須有公網 ip,就是你的路由器撥號獲取到的 ip 必須是公網 ip (可以參考 ip138 獲取到的 ip)。長城寬頻沒有公公網 ip 所以就不用往下看了,用內網穿透的工具吧,那天在家搭伺服器時發現聯通給的也是內網ip,果斷投訴他們,讓他們換成公網的 ip。 第

二、你必須有阿里雲的網域名稱,api 是阿里雲提供的,阿里雲提供網域名稱解析,所以沒有網域名稱就沒法解析了。

進入正題,先說一下原理:

乙個 windows 服務,定時獲取公網 ip ,然後呼叫 api 介面設定解析。

其實我只用到了 3 個介面:

獲取網域名稱的解析列表

cglobalconfig.accesskey 是獲取配置檔案裡配置的阿里雲的 accesskey,這個需要去阿里雲申請(不花錢)。

cglobalconfig.accesskeysecret 是獲取配置檔案裡配置的阿里雲的 accesskeysecret,這個跟 accesskey 是一對。

domain 變數是網域名稱

iclientprofile clientprofile = defaultprofile.getprofile("cn-hangzhou", cglobalconfig.accesskey, cglobalconfig.accesskeysecret);

defaultacsclient client = new defaultacsclient(clientprofile);

describedomainrecordsrequest request = new describedomainrecordsrequest();

request.domainname = domain;

describedomainrecordsresponse response = client.getacsresponse(request);

listlist = response.domainrecords;

獲取到的 list 就是這個網域名稱的解析記錄。

describedomainrecordsresponse.record 物件有以下幾個屬性:

獲取到解析記錄後獲取當前的公網 ip 位址,我這裡是從 ip138 上獲取的,沒有時間找介面,就直接解析 html 了。

}ip 就是獲取到的 當前公網 ip 位址,然後判斷與當前解析是否一致,不一致時進行解析。

listlist = cdomainhelper.getdomainrecords(cglobalconfig.domainname);

describedomainrecordsresponse.record record = list.find(rec => rec.type == "a" && rec.rr == "dev");

if (record != null)

else

}else

cdomainhelper.adddomainrecords 是新增解析記錄的方法:

iclientprofile clientprofile = defaultprofile.getprofile("cn-hangzhou", cglobalconfig.accesskey, cglobalconfig.accesskeysecret);

defaultacsclient client = new defaultacsclient(clientprofile);

adddomainrecordrequest request = new adddomainrecordrequest();

request.domainname = record.domainname;

request.rr = record.rr;

request.type = record.type;

request.value = record.value;

adddomainrecordresponse response = client.getacsresponse(request);

cdomainhelper.updatedomainrecords 是修改解析記錄的方法:

iclientprofile clientprofile = defaultprofile.getprofile("cn-hangzhou", cglobalconfig.accesskey, cglobalconfig.accesskeysecret);

defaultacsclient client = new defaultacsclient(clientprofile);

updatedomainrecordrequest request = new updatedomainrecordrequest();

request.recordid = record.recordid;

request.rr = record.rr;

request.type = record.type;

request.value = record.value;

updatedomainrecordresponse response = client.getacsresponse(request);

好了,主要的邏輯完成了,然後我們建立乙個 window 服務然後在  onstart 裡啟動乙個執行緒,每隔一段時間去解析就可以了。

<?xml version="1.0" encoding="utf-8" ?>

需要修改的是 accesskey,accesskeysecret,domainname 這三個配置項。

最後說一下,網域名稱解析不是實時生效的,需要10分鐘的時間。

第一次寫部落格,寫的不好歡迎拍磚。





使用DDNS指令碼對阿里雲網域名稱進行動態網域名稱解析

之前用bitwarden rs的docker容器 nginx反向 並設定了https,把bitwarden伺服器部署到了自己的電腦上,在校園網中提供服務 只要我的手機連上學校的wifi,就可以訪問到我電腦上的bitwarden服務。但是我遇到了乙個麻煩的問題,就是電腦在校園網的ip偶爾會發生變化,每...

DDNS動態網域名稱解析設定 針對阿里雲環境配置說明

1 你得先申請個網域名稱 2 進入網域名稱解析 3 獲取使用者的accesskey 和 accesskeysecret 4 呼叫乙個ip查詢 正則解析當前主機ip 5 呼叫阿里雲api介面設定對應的網域名稱與第4步中獲取的ip進行繫結 php 方案 樹莓派方案 到這裡ddns的解析繫結介紹完畢 下面...

linux下的動態網域名稱配置

一般家裡的機器會有乙個動態ip,在windows下有一些類似花生殼的程式來實現動態繫結網域名稱,那麼linux下呢?首先註冊乙個 再加乙個hostname,有一些挺不錯的主網域名稱,可以設定子網域名稱,例如 homelinux.com,或者乾脆 is a geek.com之類的。似乎只能加乙個,多了...