用.NET做动态域名解析

用.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打开:

其中管理界面运行效果如下:

使用时将我的starworks.cc域名换成你的即可。

说来其实我不太关心.NET以后会发展成什么样子,相比之下,我更关心我立马能用.NET做出什么来。.NET Core 3.0已经发布,其新功能还没来得及细看,但.NET当下能提供给我的想象力就已经非常丰富了,这可能就是我心中的“自由”:只要探索,总会有新的发现。

喜欢的朋友请关注我的微信公众号:【DotNet骚操作】

原文地址:https://www.cnblogs.com/sdflysha/p/20190927-dotnet-dynamic-domain-resolution.html

时间: 2024-10-17 11:46:11

用.NET做动态域名解析的相关文章

免费动态域名解析

DDNS 顾名思义就是动态域名解析,让域名绑定在动态 IP 上,比如拨号上网的 ADSL 用户.国内的 DDNS 服务有花生壳和 3322.org 这种提供商,我一直在用花生壳的免费 DDNS,可是近期情况非常糟糕,我到北京以来,就没成功的用client登录到他们的server,提示些莫名其妙的错误,到他们的官方网上,大部分人都在抱怨不能登陆,更可气的是有些朋友说自从他们付钱升级到了专业版后,一下子就能正常登录了.其它的我就不说什么了,直接放弃. 于是乎得找个替代的才行,继续 Google 下,

(转)内网网站发布到外网-nat123动态公网IP动态域名解析

环境描述: 路由器分配的是动态公网IP,且有路由器登录管理权限,网站服务器部署在路由器内部网络.如何将内网网站发布到外网大众访问? 解决方案: 内网使用nat123动态域名解析,将域名实时固定解析到路由公网IP,然后在路由器上做网站端口映射.外网访问网站时,使用动态解析域名. 实现过程: 1,明确网站内网访问地址端口,确保网站服务正常,在内网可以正常访问连接.如我内网网站访问地址是192.168.1.22:80.如果本地公网IP的80端口被屏蔽,可以更换其他网站端口,或使用nat123的80映射

LINUX下如何实现DDNS动态域名解析服务

Linux系统均可以自己写脚本命令来解析动态域名,支持IPV4和IPV6的动态域名解析直接上代码:先上IPV4的syncold=$(cat ip.asp)sleep 10new=$(ifconfig vlan2 | awk '/inet/')if [ "$old" != "$new" ] thenrm -rf ip.aspecho $new > ip.aspwget "http://main.meibu.com/ip/login.asp?name=a

【动态域名解析工具】tunnel,国内版的ngrok,花生壳可以睡觉了

在笔者的系列微信开发教程中,有一个比较基础且重要的一节:微信开发的调试.在文章中我推荐了两种动态域名解析的工具用于将本地的开发环境部署成服务器,一种是花生壳,一种是ngrok,但毕竟我等屌丝用不起或者不愿意付费试用花生壳,导致花生壳经常来大姨妈(解析失败).而ngrok的服务器是国外的,而天朝的网络想必大家都懂的.那在这样的一个环境下,调试微信的时候显得特别不方便.无意中呢,看到tunnel这样一个工具,看了下官网的介绍后,觉得尝试使用下,最终让我觉得放弃使用花生壳和ngrok了.至于为何,那我

动态域名解析

域名服务器(domain name server)的简称为DNS,它存储了域名与IP地址对应的列表.DNS服务器,是需要设置固定IP地址的. 静态域名 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 动态域名的功能就是实现固定域名到动态IP地址之间的解析.用户每次上网得到新的IP地址之后,安装在用户计算机里的动态域名软件就会把这个IP地址发送到动态域名解析服务器,更新域名解析数据库.Internet上的其他人要访问这个域名的时候,动态域名解析服务器会返回正确的IP

动态域名解析制作

在server.desktop主机上面关闭防火墙 firewall-cmd --permanent --add-server=dns firewall-cmd --reload vim /etc/named.conf 在desktop主机上设置slave,在server上面设置masters vim /etc/named.conf vim /etc/namewd.rfc1912.zones systemctl start named vim /etc/resolv.conf 注意:设置域名解析地

邮件服务器怎样做反向域名解析?

[问]:目前许多邮件服务器如sina.com,hotmail.com,yahoo.com.cn等等都采用了垃圾邮件识别阻拦技术+IP反向解析验证技术以更好的阻拦垃圾邮件.那具体怎样做反向域名解析(反向DNS解析)? [答]: www.dnsstuff.com功能如下: http://www.dnsstuff.com 是一个提供在线对域名.IP及DNS等进行测试及查询的网站,可以为咱们平时工作中遇到的一些域名类技术问题提供很多有用的信息,以下是我做的一个简单的使用介绍,希望对大家的正确使用提供帮助

采用阿里的API进行动态域名解析

#!/usr/bin/env python # -*- coding:utf-8 -*- import os from aliyunsdkcore import client from aliyunsdkcore.request import RpcRequest product="Domain" version="2016-05-11" accesskey="XXXXXXXXXXXXXXXXXXXX" #请替换成自己的accesskey acc

linux的DNS之动态域名解析及key验证更新

dns的key验证更新主机设置生成密钥,并复制密钥文件查看密钥信息编辑密钥文件修改密钥信息修改主配置文件,添加密钥文件路径域配置文件中更新类型换成key验证更新远程传送密钥给测试端重新加载 测试端设置通过key认证的方式远程更新主机主机测试远程更新效果出现 hi.test.com.相对应ip,更新成功 . dhcp+dns组成动态域名解析ddns主机端设置下载dhcpdhcp加入防火墙机制 设置dhcp配置文件 删除27,28行以及35行后的内容添加修改配置文档该域名与dns的ip以及开启dhc