这篇文章主要介绍了用.NET做动态域名解析的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

动态域名解析,或DNSR,通常用于解析IP地址经常变化的域名。电信网络提供了公网IP,给广大程序员远程办公、内容分享等方面带来了极大的便利。但公网IP是动态的,它会经常变化,因此通过IP的方式访问非常不友好。因此就需要引入“花生壳”等动态域名解析工具,这类解析工具限制很多,如免费版只能使用指定的二级域名,解析的各类很少,域名数量有限制等等。

还好我们有.NET(和阿里云)通过简短的几行.NET代码,即可轻松完成动态域名解析。

动态域名解析的过程

    第一步 知道自己的IP地址 第二步 更新DNSIP解析值

获取自己的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当下能提供给我的想象力就已经非常丰富了,这可能就是我心中的“自由”:只要探索,总会有新的发现。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

最新资讯
特斯拉对手电动皮卡公司Rivian获25亿美元新一轮融资

特斯拉对手电动皮卡公

在美国电动车行业,特斯拉一直遥遥领先,但也不乏挑战者。
00后比90后少了4700万?背后的真相一定要知道

00后比90后少了4700万

你可能觉得人口的多少与自己并无多大关系,但是,最近一条
蜂鸟这只小可爱,身怀怎样的绝技?

蜂鸟这只小可爱,身怀怎

数感并不是人类独有的认知。自然界,很多动物都有能力分
怎样回短信更容易找对象?心理学研究:不要秒回!

怎样回短信更容易找对

许多人每天最头疼的事情莫过于收发手机信息,以怎样的速
为何科学家们会反对一个 “戴口罩” 的研究?

为何科学家们会反对一

佩戴口罩有助于预防新冠病毒的传播,这在如今的疫情防控
阿里股权曝光:马云持股降至4.8% 蒋凡被除名合伙人

阿里股权曝光:马云持

近日,阿里巴巴集团向美国SEC提交财年报告,其中显示,截至2
最新文章
用.NET做动态域名解析的方法示例

用.NET做动态域名解析

这篇文章主要介绍了用.NET做动态域名解析的方法示例,文
.NET Core3.1编写混合C++程序

.NET Core3.1编写混合

这篇文章主要介绍了.NET Core3.1编写混合C++程序,文中
ASP.NET Core 3.0使用gRPC的具体方法

ASP.NET Core 3.0使用

这篇文章主要介绍了ASP.NET Core 3.0使用gRPC,文中通过
ASP.NET Core 3.0 gRPC拦截器的使用

ASP.NET Core 3.0 gRP

这篇文章主要介绍了ASP.NET Core 3.0 gRPC拦截器的使
ASP.NET Core 3框架揭秘之 异步线程无法使用IServiceProvider问题

ASP.NET Core 3框架揭

这篇文章主要介绍了ASP.NET Core 3框架揭秘之异步线程
3分钟快速学会在ASP.NET Core MVC中如何使用Cookie

3分钟快速学会在ASP.N

这篇文章主要给大家介绍了关于如何通过3分钟快速学会