原文地址: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

【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...相关推荐

  1. 如何使用阿里云云解析API实现动态域名解析,搭建私有服务器

    原文地址:http://www.yxxrui.cn/article/116.shtml 未经许可请勿转载,如有疑问,请联系作者:yxxrui@163.com 公司的网络没有固定的公网IP地址,但是能够 ...

  2. 利用阿里云的API实现动态域名解析

    首先在实现动态域名解析之前要具备两个条件: 第一.你必须有公网 IP,就是你的路由器拨号获取到的 IP 必须是公网 IP (可以参考 ip138 获取到的 IP).长城宽带没有公公网 IP 所以就不用 ...

  3. 域名解析异常如何解决?快解析轻松实现动态域名解析

    域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,只要这个IP地址对应相关域名,这就叫域名解析.工作中常会遇到域名解析故障,比如访问站点对应的IP地址没有问题, ...

  4. python如何调用阿里云接口_python 调用阿里云云解析api添加记录

    首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-alidns 可以配合jenkins传递参数 # ...

  5. 用阿里云 DNS SDK 实现动态域名解析

    最近学 Java ,就将 Git 服,和测试服,直接放在家里的树莓派3和旧笔记本上, 为了在外网顺利访问,需要将域名动态的解析到家里的 IP 上, 网上了解了一番,觉得阿里云那套通过 sdk 来更新域 ...

  6. 阿里:饿了么质量体系搭建实战(含福利)

    "质量与效率"一直是阿里关注的焦点.相对于软件开发,软件测试起步较晚,缺乏拥有专业知识的人才.即便是大学开设的软件工程专业,针对软件测试的介绍也只是涉及少量的概念和设计测试用例的方 ...

  7. openwrt使用godaddy的api实现动态域名解析

    内容转自:分享一个通用的godaddy_DDNS_shell脚本 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz!本脚本针对ipv6,v4也支持,只需在gdip的解析 ...

  8. 利用Python+阿里云实现DDNS(动态域名解析)

    引子 我想大家应该都很熟悉DNS了,这回在DNS前面加了一个D又变成了什么呢?这个D就是Dynamic(动态),也就是说,按照传统,一个域名所对应的IP地址应该是定死的,而使用了DDNS后,域名所对应 ...

  9. 什么是动态域名解析?域名怎么解析到内网IP

    首先说说什么是域名解析,域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,把这个IP地址对应相关域名,这就叫域名解析.动态域名与动态域名解析是相互关联的关系,通 ...

最新文章

  1. 别动不动就画折线图了,教你4种酷炫可视化方法
  2. elasticsearch不能使用root启动问题解决
  3. 2016网络安全***赛记录
  4. 断开式 Dgv 修改数据 winform
  5. 在anaconda下创建我的第一个scrapy爬虫——爬取dmoz网站某一网址下的目录的链接名称以及链接地址...
  6. git学习(二)查看log历史记录
  7. 直播录屏软件哪个好?什么软件可以录屏直播会议?
  8. 15 行 Java 代码实现一个标准输出的进度条,其中的知识点你知道但并不一定会用...
  9. python网络爬虫之如何伪装逃过反爬虫程序的方法
  10. 资深项目经理推荐的几款免费/开源项目管理工具
  11. 太阳直射点纬度计算公式_高中地理——每日讲1题(极昼、极夜、太阳高度角、太阳辐射)...
  12. TwinCAT3 设置断电保持变量
  13. 前端局部刷新的几种方式
  14. 电脑加载,电脑加载慢又卡怎么办
  15. 目标检测学习————Keras搭建yolo3目标检测平台
  16. 做SEO,如何分析竞争对手网站-趣味seo
  17. python_与或非逻辑/真假值事例
  18. 动态网页和静态网页之间的区别?
  19. 2018年11月16日SQL Server实验内容(触发器实验)
  20. MySQL数据库 *实验报告6 查询where子句

热门文章

  1. 树形dp小胖守皇宫(vijosP1144)
  2. 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
  3. solr4.6本地数据提交异常
  4. 初一计算机下册理论知识,初中信息技术七年级下册(第七版)
  5. php 随机在文章中添加锚文本_SEO站长布局锚文本时的7大注意事项
  6. 数据结构c语言版第16页,数据结构c语言版
  7. echarts 弹出放大_Echarts图标增加全屏/放大功能
  8. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...
  9. AUTOSAR从入门到精通100讲(四十八)-Lin通信协议栈分析两步走-LinTrcvLIN Driver
  10. 手把手教你用EVO工具评估SLAM数据集TUM、KITTI、EuRoC(附代码)