【升级版】如何使用阿里云云解析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.mzph.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;同时提供手动选项设置正文上下左…