【升級版】如何使用阿里云云解析API實現動態域名解析,搭建私有服務器【含可執行文件和源碼】...

原文地址:http://www.yxxrui.cn/article/179.shtml

未經許可請勿轉載,如有疑問,請聯系作者:yxxrui@163.com

我遇到的問題:公司的網絡沒有固定的公網IP地址,但是需要能夠保證的是,每次動態分配的IP地址均為獨立的公網IP,只是每次分配后會在1-2天后更換,或者重啟路由器后更換,為了能夠把這個公網IP利用起來,大家常用的是使用花生殼之類的軟件來操作,我使用過花生殼的多款產品,挺好的,就是有一下幾個缺點:

1、需要使用花生殼上購買的域名才行,或者使用免費的殼域名,其丑無比

2、不穩定,也很慢

3、限制流量,超流量需要收費

4、限制端口,特定端口需要收費

5、需要在電腦上運行一個花生殼的軟件

解決方案:但是為了解決問題,我開始摸索自己搞定它,公司域名從阿里云上購買,阿里云提供云解析技術免費版,提供通過api來管理域名的功能,當我看到該文檔的時候直接就看到了希望,解決起來絕對沒問題了。首先需要確認一下,有兩種情況:

1、公司服務器直接接入網線,這個時候服務器的IP就是公網IP

2、公司服務器鏈接公司路由器,路由器鏈接網線,這個時候路由器上是公網IP,而服務器上是局域網IP

第一種情況最簡單了,不需要設置什么了,第二種情況需要到路由器設置界面設置端口轉發或者直接將全部端口映射到內網的服務器IP上,這樣的話,訪問公網IP的某個端口時相當于訪問內網IP的映射端口,比如路由器IP為125.120.83.30,內網IP為192.168.168.168。可以將路由器中80端口映射到192.168.168.168的80端口上。

到阿里云控制臺申請accessKeyIdaccessKeySecret,用來調用API的,為了簡單起見,先給域名添加一條解析記錄,這樣就不需要在程序里判斷該域名是否已創建,然后可以直接修改解析記錄了。比如我的域名為yxxrui.cn,記錄值為blog,也就是要把子域名blog.yxxrui.cn指向我自己電腦125.120.83.30上。

下邊直接貼出代碼:

using System;
using System.Configuration;
using System.Net;
using System.Text;
using Aliyun.Acs.Alidns.Model.V20150109;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;namespace AliyunDomain
{class Program{private static readonly string RegionId=GetConfig("regionId");private static readonly string AccessKeyId=GetConfig("accessKeyId");private static readonly string AccessKeySecret=GetConfig("accessKeySecret");private static string _recordId = GetConfig("recordId");private static readonly string Domain = GetConfig("domain");private static readonly string Rr = GetConfig("rr");private static readonly IClientProfile ClientProfile = DefaultProfile.GetProfile(RegionId, AccessKeyId,AccessKeySecret);private static readonly IAcsClient Client = new DefaultAcsClient(ClientProfile);static void Main(string[] args){if (string.IsNullOrWhiteSpace(_recordId)){//如果沒有獲取過,那么獲取一下,然后保存起來_recordId = GetRecordId(Domain, Rr);SaveConfig("recordId",_recordId);}if (_recordId == "") return;//獲取成功,并且有變化時string lastIp = GetConfig("lastIP");string curIp = GetIp();if (!curIp.Equals("") && !lastIp.Equals(curIp)){var request = new UpdateDomainRecordRequest{RecordId = _recordId,RR = Rr,Type = "A",Value = curIp,TTL = 600,Priority = 10};Client.DoAction(request);SaveConfig("lastIP", curIp);}}#region 保存配置信息/// <summary>/// 保存配置信息/// </summary>/// <param name="name"></param>/// <param name="value"></param>private static void SaveConfig(string name,string value){var cfa = ReadAppConfig();cfa.AppSettings.Settings[name].Value = value;cfa.Save();}#endregion#region 獲取配置項/// <summary>/// 獲取配置項/// </summary>/// <param name="name"></param>/// <returns></returns>private static string GetConfig(string name){var cfa = ReadAppConfig();return cfa.AppSettings.Settings[name].Value;}#endregion#region 調用阿里云接口獲取域名的唯一記錄ID/// <summary>/// 調用阿里云接口獲取域名的唯一記錄ID/// </summary>/// <param name="domain">域名</param>/// <param name="rr">子域名</param>/// <returns></returns>private static string GetRecordId(string domain,string rr){DescribeDomainRecordsRequest reqq = new DescribeDomainRecordsRequest{DomainName = domain,RRKeyWord = rr};var rss = Client.GetAcsResponse(reqq);foreach (var record in rss.DomainRecords){if (record.DomainName.Equals(domain) && record.RR.Equals(rr)){return record.RecordId;}}return "";}#endregion#region 獲取公網IP/// <summary>/// 獲取當前電腦的真實外網IP地址,可以自行修改成穩定的/// </summary>/// <returns></returns>private static string GetIp(){string ip = "";try{//獲取或設置用于向Internet資源的請求進行身份驗證的網絡憑據WebClient myWebClient = new WebClient { Credentials = CredentialCache.DefaultCredentials };//從指定網站下載數據Byte[] pageData = myWebClient.DownloadData("http://www.yxxrui.cn/yxxrui_cabangs_api/myip.ashx");//如果獲取網站頁面采用的是GB2312,則使用這句string pageHtml = Encoding.Default.GetString(pageData);//如果獲取網站頁面采用的是UTF-8,則使用這句//string pageHtml = Encoding.UTF8.GetString(pageData);return pageHtml;}catch (WebException webEx){}return ip;}#endregion#region 獲取配置文件private static Configuration _config;private static Configuration ReadAppConfig(){if (_config == null){string configPath = @"app.config";_config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap(){ExeConfigFilename = configPath}, ConfigurationUserLevel.None);}//MessageBox.Show(config.AppSettings.Settings["serverIp"].Value);return _config;}#endregion}
}

?

app.config文件內容如下:

本代碼為C#代碼,建議將項目設置為winform程序,不要設置為控制臺程序,否則每次執行時會彈出黑色的控制臺,很惡心人的。該代碼未實現自動檢測和執行(如需程序創建計劃任務,可聯系我),只是做了以下工作:

1、獲取當前電腦真實公網IP

2、查看當前IP是否有變化

3、若無變化直接退出,若有變化則修改域名解析設置

這些并不能達到實時解析。但可以通過使用window 操作系統中的任務計劃程序,制定計劃,每(1)分鐘執行該軟件一次即可。

代碼與源碼壓縮包下載地址:http://www.yxxrui.cn/article/179.shtml

轉載于:https://www.cnblogs.com/yxxrui/p/aliyunddns_update.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java管理擴展

什么是JMX&#xff1f; Java管理擴展&#xff08;JMX&#xff09;是一種API&#xff0c;用于管理或監視各種資源&#xff0c;例如應用程序&#xff0c;設備&#xff0c;服務&#xff0c;當然還有JVM。 通過Java社區流程&#xff08;JCP&#xff09;開發&#xff0c;JMX技術被構…

登錄網頁后要彈出一個新標簽_連永久鏈接都不會,還做什么新媒體?

上次給主編大大發的預覽鏈接失效了&#xff0c;被罵得狗血淋頭。大部分運營人可能都遇到過這種情況&#xff0c;忽視了預覽生成的鏈接只是臨時的&#xff0c;在12小時后或超過500閱讀量后就會失效。一個疏忽&#xff0c;給自己帶來了不必要的麻煩&#xff0c;耽誤工作&#xff…

混頻通信的matlab仿真,基于MATLAB的擴頻通信系統仿真研究—上海交通大學

基于MATLAB 的擴頻通信系統仿真研究范偉 翟傳潤 戰興群(上海交通大學電子信息與電氣工程學院&#xff0c;200030&#xff0c;上海)摘要 本文闡述了擴展頻譜通信技術的理論基礎和實現方法&#xff0c;利用MATLAB 提供的可視化工具Simulink 建立了擴頻通信系統仿真模型&#xff0…

static_cast與dynamic_cast轉換

static_cast與dynamic_cast轉換   一 C語言中存在著兩種類型轉換&#xff1a; 隱式轉換和顯式轉換 隱式轉換&#xff1a;不同數據類型之間賦值和運算&#xff0c;函數調用傳遞參數……編譯器完成 char ch;int i ch; 顯示轉換&#xff1a;在類型前增加 &#xff1a;&#xff…

vue使用iview Timeline 時間軸不顯示問題

vue Timeline 時間軸不顯示渲染的效果 官網代碼 <Timeline pending><TimelineItem>發布1.0版本</TimelineItem><TimelineItem>發布2.0版本</TimelineItem><TimelineItem>發布3.0版本</TimelineItem><TimelineItem><a href…

python 重置索引_python pandas 對series和dataframe的重置索引reindex方法

reindex更多的不是修改pandas對象的索引&#xff0c;而只是修改索引的順序&#xff0c;如果修改的索引不存在就會使用默認的None代替此行。且不會修改原數組&#xff0c;要修改需要使用賦值語句。series.reindex()import pandas as pdimport numpy as npobj pd.Series(range(4…

Java EE 6 Web配置文件。 在云上。 簡單。

Java SE還可以。 Java EE是邪惡的。 這就是我一直想的。 好吧&#xff0c;現在不再了。 讓我分享我的經驗。 幾周前&#xff0c;我開始考慮將舊版spring hibernate tomcat應用程序移植到新平臺上&#xff1a; SAP NetWeaver云 。 我知道您在極客那里的想法&#xff1a;…

Kubernetes核心概念總結

1、基礎架構 1.1 Master Master節點上面主要由四個模塊組成&#xff1a;APIServer、scheduler、controller manager、etcd。 APIServer。APIServer負責對外提供RESTful的Kubernetes API服務&#xff0c;它是系統管理指令的統一入口&#xff0c;任何對資源進行增刪改查的操作都要…

七、spring boot 1.5.4 集成shiro+cas,實現單點登錄和權限控制

1.安裝cas-server-3.5.2 官網&#xff1a;https://github.com/apereo/cas/releases/tag/v3.5.2 下載地址&#xff1a;cas-server-3.5.2-release.zip 安裝參考文章&#xff1a;http://blog.csdn.net/xuxuchuan/article/details/54924933 注意&#xff1a; 輸入 <tomcat_key&g…

php連接mysql數據,php連接mysql數據庫

$sql_link mysql_connect("主機名","登入用戶名","登入用戶名密碼");如果連接成功&#xff0c;就會返回一個mysql句柄,可以簡單的理解成這個$sql_link 是php跟mysql的一個橋梁&#xff0c;通過該橋梁我們可以進入到mysql。進入到mysql之后&…

CSS-自定義變量

使用背景&#xff1a; 一些常見的例子&#xff1a;為風格統一而使用顏色變量一致的組件屬性&#xff08;布局&#xff0c;定位等&#xff09;避免代碼冗余*更方便的從CSS向JS傳遞數據&#xff08;例如媒體斷點&#xff09; 為什么使用&#xff1a; 以下幾點是未來CSS屬性的簡短…

url存在寬字節跨站漏洞_利用WebSocket跨站劫持(CSWH)漏洞接管帳戶

在一次漏洞懸賞活動中&#xff0c;我發現了一個使用WebSocket連接的應用&#xff0c;所以我檢查了WebSocket URL&#xff0c;發現它很容易受到CSWH的攻擊(WebSocket跨站劫持)有關CSWH的更多詳細信息&#xff0c;可以訪問以下鏈接了解https://www.christian-schneider.net/Cross…

php 數組對比 unset,如何區分PHP中unset,array_splice的區別

1.使用的函數a.函數unset()unset ( mixed $var , mixed $... ? ) : voidunset()銷毀指定的變量。b.函數array_slice()array_splice(array,start,length,array)array表示數組。start表示刪除元素的開始位置。length表示被移除的元素個數&#xff0c;也是被返回數組的長度。(可…

MapReduce算法–二級排序

我們將繼續進行有關實現MapReduce算法的系列文章&#xff0c;該系列可在使用MapReduce進行數據密集型文本處理中找到。 本系列的其他文章&#xff1a; 使用MapReduce進行數據密集型文本處理 使用MapReduce進行數據密集型文本處理-本地聚合第二部分 使用Hadoop計算共現矩陣 …

Redis 字符串(String)

Redis 字符串(String) Redis 字符串數據類型的相關命令用于管理 redis 字符串值&#xff0c;基本語法如下&#xff1a; 語法 redis 127.0.0.1:6379> COMMAND KEY_NAME 實例 redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> GET runoobkey "…

前端基礎-CSS的各種選擇器的特點以及CSS的三大特性

一、 基本選擇器二、 后代選擇器、子元素選擇器三、 兄弟選擇器四、 交集選擇器與并集選擇器五、 序列選擇器六、 屬性選擇器七、 偽類選擇器八、 偽元素選擇器九、 CSS三大特性 一、 基本選擇器 1、id選擇器 #1、作用&#xff1a;根據指定的id名稱&#xff0c;在當前界面中找…

Php流式 大文件,如何使用PHP解析XML大文件

如果使用 PHP 解析 XML 的話&#xff0c;那么常見的選擇有如下幾種&#xff1a;DOM、SimpleXML、XMLReader。如果要解析 XML 大文件的話&#xff0c;那么首先要排除的是 DOM&#xff0c;因為使用 DOM 的話&#xff0c;需要把整個文件全部加載才能解析&#xff0c;效率堪憂&…

python 白盒測試_白盒測試教程 - 顏麗的個人空間 - OSCHINA - 中文開源技術交流社區...

總共貼了39節&#xff0c;后續還有很長&#xff0c;共122節&#xff0c;文章名為‘白盒測試教程’1、白盒測試概念2、測試覆蓋標準3、邏輯驅動測試4、基本路徑測試白盒測試概念1、白盒測試也稱結構測試或邏輯驅動測試&#xff0c;是一種測試用例設計方法&#xff0c;它從程序的…

Oracle 分析函數及常用函數

什么叫分析函數(Analytic function)&#xff1f; Oracle從8.1.6開始提供分析函數&#xff0c;分析函數用于計算基于組的某種聚合值&#xff0c;它和聚合函數的不同之處是 對于每個組返回多行&#xff0c;而聚合函數對于每個組只返回一行。 基本語法 function_name(arg1,arg2,..…

ScanTailor-ScanTailor 強大的多方位的滿足處理掃描圖片的需求

ScanTailor 強大的多方位的滿足處理掃描圖片的需求ScanTailor 能做什么&#xff1f;批量或單張或選擇區間旋轉圖片自動切割頁面&#xff0c;同時提供手動選項自動識別圖像歪斜角度&#xff0c;同時提供手動選項自動識別正文內容裁剪&#xff0c;同時提供手動選項設置正文上下左…