用.NET做动态域名解析
动态域名解析,或DNSR
,通常用于解析IP
地址经常变化的域名。电信网络提供了公网IP
,给广大程序员远程办公、内容分享等方面带来了极大的便利。但公网IP
是动态的,它会经常变化,因此通过IP
的方式访问非常不友好。因此就需要引入“花生壳”等动态域名解析工具,这类解析工具限制很多,如免费版只能使用指定的二级域名,解析的各类很少,域名数量有限制等等。
还好我们有.NET
!(和阿里云)通过简短的几行.NET
代码,即可轻松完成动态域名解析。
动态域名解析的过程
- 第一步 知道自己的
IP
地址 - 第二步 更新
DNS
的IP
解析值
获取自己的IP
地址
现在网上有许多网站、服务或者API
可以快速获取自己的IP
地址,如随手在百度上可以找到http://www.ip138.com/,国外还有https://www.ipify.org/等服务,都挺好用。这些服务.NET
也可以做,只需几行简短的代码,然后部署到服务器上:
async Task Main()
{await WebHost.CreateDefaultBuilder().UseStartup<UserQuery>().Build().RunAsync();
}public void ConfigureServices(IServiceCollection services) {}public void Configure(IApplicationBuilder app) => app.Run(ctx => ctx.Response.WriteAsync(ctx.Connection.RemoteIpAddress.ToString()));
我已经将该代码部署到了服务器上,域名是:https://echo-ip.starworks.cc,可供有需要的朋友测试。
更新DNS
解析值
各大域名网站都有自己的DNS
解析API
或者SDK
,阿里云也不例外,我可以通过几行简短的C#
代码即可更新DNS
解析值:
// 安装NuGet包:aliyun-net-sdk-alidns
string currentIp = new WebClient().DownloadString("https://echo-ip.starworks.cc/");
var client = new DefaultAcsClient(DefaultProfile.GetProfile("", Util.GetPassword("aliyun_dns_access_key"), Util.GetPassword("aliyun_dns_secret_key")));
var domainRecords = client.GetAcsResponse(new DescribeDomainRecordsRequest
{ DomainName = "starworks.cc", RRKeyWord = "cool",
}).DomainRecords;DescribeDomainRecordsResponse.DescribeDomainRecords_Record homeRecord = domainRecords.First(x => x.RR == "cool");
if (homeRecord._Value != currentIp)
{client.GetAcsResponse(new UpdateDomainRecordRequest{RecordId = homeRecord.RecordId,RR = homeRecord.RR,Type = homeRecord.Type,_Value = currentIp,});
}
然后将该脚本添加到电脑的开机启动项,这样每次开机时,即可确保我的cool.starworks.cc
为最新的本地IP
了。
阿里云的
SDK
设计有点取巧了,客户端DefaultAcsClient
只有一个方法:GetAcsResponse<T>(T request)
,这样一来不太方便,可以调用哪些方法不能一目了然,二来还会让调用方感觉很迷惑,明明是更新操作,为什么要调用Get
?与此相比,腾讯云提供的
SDK
就人性化很多,虽然我的域名绑定在阿里云上。?
不是80端口怎么办?
默认是不允许80
/443
端口开放外网的,因此即使有动态域名绑定,以后发给客户时,网址里面也带一个长长的端口名,如:https://cool.starworks.cc:44300
。在DNS
记录类型中,有多种方式解决这个问题,可以指定为SRV
或者显性URL
、隐性URL
来解决这个问题:
这个过程可以通过C#
代码完成,代码如下:
client.GetAcsResponse(new AddDomainRecordRequest
{DomainName = "starworks.cc", RR = "cool",Type = "SRV",_Value = "0 5 44403 home.starworks.cc",
}
这样一来,只需在浏览器中输入:http://cool.starworks.cc,即可自动显示我http://home.starworks.cc:44403 的内容:
总结
文中的“祖传代码”链接如下,可随意下载使用,用LINQPad
打开:
- 管理界面:https://github.com/sdcb/blog-data/blob/master/2019/20190927-dotnet-dynamic-domain-resolution/aliyun-manage-dns.linq
- 动态DNS:https://github.com/sdcb/blog-data/blob/master/2019/20190927-dotnet-dynamic-domain-resolution/aliyun-update-dns.linq
其中管理界面运行效果如下:
使用时将我的starworks.cc
域名换成你的即可。
说来其实我不太关心.NET
以后会发展成什么样子,相比之下,我更关心我立马能用.NET
做出什么来。.NET Core 3.0
已经发布,其新功能还没来得及细看,但.NET
当下能提供给我的想象力就已经非常丰富了,这可能就是我心中的“自由”:只要探索,总会有新的发现。
用.NET做动态域名解析相关推荐
- 用.NET做DDNS动态域名解析和SSL证书申请
本文主要介绍 IPv6 配置 DDNS 解析和 SSL 证书申请工具的开发历程和其中的相关知识.工具使用.NET开发,已开源,目前该工具的域名解析只支持阿里云. 文中提及或使用的 .NET 开源项目: ...
- 群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云)
群晖NAS教程(二十一).利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云.腾讯云dnspod.Cloudflare.华为云) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森 ...
- 通过动态域名解析(DDNS)实现远程控制Windows主机
通过动态域名解析(DDNS)实现远程控制Windows主机 1.常规实现远程桌面控制的几种方式 2.开始配置前的一些准备工作 3.配置路由器的虚拟服务器 4.设置被控制电脑允许被远程访问 5.动态域名 ...
- Python+阿里云DNS 搭建DDNS动态域名解析
家用的动态公网IP在断电以及一段时间后会变化,现在家宽公网IP开网盘以及代理管得越来越严格,已经有检测到被封的案例 上海检测web封停 这让我这种挂种子的PT党(迫真)感到害怕 以前我把国外的免费域名 ...
- 动态域名解析--每步动态域名解析
什么是ddns? ddns是动态dns,也就是可以解析动态ip地址的软件 有什么作用? ddns可以实现的服务很多,可以实现在自己的服务器上架设网站,ftp,甚至是可以在自己的机器上做游戏私服. 什么 ...
- 腾讯云域名与个人树莓派设备的动态域名解析
腾讯云域名与个人pc的动态域名解析 前言 目标 前置条件 路由器设置端口映射 腾讯云域名动态解析脚本 Windows脚本定时处理 前言 现在随着技术的发展,搭建个人网站已经是一个普遍的事情,也可以方便 ...
- DNS部署之动态域名解析DDNS
DNS部署之动态域名解析DDNS dns+dhcp=ddns=动态域名解析=花生壳 DDNS: DDNS:之前的远程更新是基于静态网络做的,但是如果我们用动态网络获取ip,dns就不能及时更新到ip的 ...
- Openwrt动态域名解析
Openwrt动态域名解析 书接上回,做armbian动态域名解析还可以用openwrt大法搞他 Armbian安装Docker之后的100种玩儿法<动态域名解析DDNS自动更新> 1&g ...
- linux中如何实现动态域名解析
1.什么是动态域名解析 动态域名解析服务,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程 ...
- 动态域名解析软件,域名解析管理系统学习教程
静态域名解析,即是平常所说的域名解析,指将一个域名解析到一个固定公网IP,设定后是不会变的. 动态域名解析,这个动态是指动态公网ip,即是将动态变化的公网ip解析到固定一个域名,保证域名的长久可用. ...
最新文章
- Linq To select
- python定义一个字典并遍历字典中的键和值_python字典操作总结
- UA OPTI570 量子力学32 参考系与绘景
- Android okHttp上传图片
- 每日一学:如何转换png图片为jpg图片
- rem.js常用代码
- python面试题之简要描述Python的垃圾回收机制(garbage collection)
- centos 部署.netcore 开发环境
- mysql新手常见问题_MySQL数据库入门-新手常见问题答疑
- 44 The shopping psychology 购物心理
- Python文件与函数练习题
- TED如何和压力做朋友(第二天)
- vs商业智能项目的安装
- 台式机通过网线共享笔记本电脑无线网络
- 传统企业:转型互联网,机遇大,挑战也大
- 在鹅厂工作的广西表妹教我用Python生成会跳舞的美女~
- 关系模式(关系模式必须遵循)
- error:jump to case label [-fpermissive]
- 【破解利器】反汇编工具 and 反编译(Decompilers)
- (Talking face) EVP