前言

在国内想要申请公网的IPV4,机会渺茫,不过还好,现在三大运营商基本上都已经提供了IPV6了,等于给我们留了另外一条路,这次在做映射时,从网上找了些资料,发现几乎都没有公开源码,我对安全隐私方面还是比较讲究的,所以只能自己动手写一个了,希望可以帮助到相应的人。相应的源码请查看连接:(29条消息) AliDDNS.rar-网络基础文档类资源-CSDN文库https://download.csdn.net/download/rongrongZHR/41218114

我这次使用的是阿里云的DDNS,阿里云官方已经提供了相应的SDK给我们使用,所以程序写起来还是比较简单的,本次使用到的阿里云SDK如下:aliyun-net-sdk-alidns.2.6.32、aliyun-net-sdk-core.1.5.10。

一、申请域名

域名申请这种事情网上已经有很详细的教程,这里推荐直接参考阿里云的教程就可以了:注册通用域名 (aliyun.com)https://help.aliyun.com/document_detail/54068.html

二、添加解析

1、选择对应的记录类型,AAAA表示IPV6的解析

2、主机记录自己定义

3、记录值可以先随便填一个,例如:2400::1,只要符合IPV6的格式就可以了

三、获取密钥

如下图所示,记住自己的accessKeyId以及secret,等一下要用到。

四、使用程序

在下载下来的源码中,进入AliDDNS\aliyunddns\bin\Debug,修改配置文件Config.json里面的内容,如下图所示:

1、SubDomain:填写需要解析的域名

2、填入从阿里云获取的accessKeyId以及secret

3、填入电脑中对应网卡的MAC地址

修改完毕之后,执行AliDDNS\aliyunddns\bin\Debug\aliyunddns.exe,执行完毕之后,查看logs文件中的信息,如果有报错,则根据报错提示进行相应的修改。

如果没有报错,说明前面的配置都是OK的,此时已经可以使用域名进行操作了,例如想要访问电脑上部署的网站,可以在另外一台有IPV6的电脑上直接访问:域名:端口

五、定时执行

因为IPV6的地址也不会固定的,隔一段时间会发生变更,如果不嫌麻烦,每隔一段时间就手动执行一下软件,到第四步基本上已经可以结束了,不过人总是会变懒的嘛,所以就在电脑上做一个定时任务就可以了。步骤如下:

1、打开“任务计划管理器”

2、创建任务

3、设置常规项:“无论是否登录都执行”。

3、设置触发器

4、设置需要操作的程序

5、 其他设置,根据自己的需要进行设置即可

设置成功后,可以立即执行一次,查看logs文件中是否有报错。

六、源码说明

1、程序结构

2、配置文件内容

3、实体类不用自己编写,这里推荐一个网站:在线JSON转C#实体类,JSON转Java实体类 (sojson.com)https://www.sojson.com/json2entity.html

4、Nlog配置文件,这个插件写日志特别好用,但是一直不会高级用法,现在都是使用配置文件中的默认方法,希望有高手可以指点一下。

5、主函数

using System;
using System.Text;
using Aliyun.Acs.Alidns.Model.V20150109;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Newtonsoft.Json;
using System.Text.RegularExpressions;namespace aliyunddns
{class Program{static void Main(string[] args){    try{//获取Config文件并解析string configJson = Tool.GetConfig();ConfigJson json = JsonConvert.DeserializeObject<ConfigJson>(configJson);string SubDomain = json.SubDomain;string accessKeyId = json.accessKeyId;string secret = json.secret;string mac = Regex.Replace(json.mac, "-", "");//获取本地IPV6地址string localipv6str = Tool.GetAddr(mac);//调用阿里云查询接口获取域名的解析记录DescribeSubDomainRecordsRequest describeSubDomainRecordsRequest = new DescribeSubDomainRecordsRequest{SubDomain = SubDomain};IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, secret);DefaultAcsClient client = new DefaultAcsClient(profile);DescribeSubDomainRecordsResponse _get = client.GetAcsResponse(describeSubDomainRecordsRequest); //获取解析数据string getHttpResponse = Encoding.Default.GetString(_get.HttpResponse.Content);                 //获取解析数据的字符内容AliyunResponse aliyunResponse = JsonConvert.DeserializeObject<AliyunResponse>(getHttpResponse); //将字符内容转为实体类//如果远程记录的IP地址与本地记录的不一致,则进行修改if (localipv6str != aliyunResponse.DomainRecords.Record[0].Value){//定义修改远程解析所需要的信息UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest{RR = aliyunResponse.DomainRecords.Record[0].RR,                     //子域名Type = aliyunResponse.DomainRecords.Record[0].Type,                 //记录类型_Value = localipv6str,                                              //需要修改的IPRecordId = aliyunResponse.DomainRecords.Record[0].RecordId          //记录ID};var response = client.GetAcsResponse(updateDomainRecordRequest);        //调用接口进行修改Tool.MessageManager("远程IP地址已修改为:" + localipv6str, MsgTypeEnum.info);}else{Tool.MessageManager("远程记录IP地址与本地一致,不需修改,IP地址为:" + localipv6str, MsgTypeEnum.info);}}catch (Exception e){Tool.MessageManager("故障:" + e.Message, MsgTypeEnum.error);}}}
}

6、一些辅助函数,主要包括:读取配置文件、写log、获取本机有效IPV6

using NLog;
using System;
using System.IO;
using System.Net.NetworkInformation;
using System.Text;namespace aliyunddns
{/// <summary>/// 消息类型枚举/// </summary>public enum MsgTypeEnum{/// <summary>/// 软件Bug/// </summary>error,/// <summary>/// 正常消息显示/// </summary>info,/// <summary>/// 运行Bug/// </summary>debug};public class Tool{static readonly private Logger logger = LogManager.GetCurrentClassLogger();public static void MessageManager(string msg, MsgTypeEnum type){switch (type.ToString()){case "error": logger.Error(msg); break;         //软件级BUGcase "info": logger.Info(msg); break;           //运行BUGcase "debug": logger.Debug(msg); break;         //正常消息展示default: break;}}/// <summary>/// 读取文件函数/// </summary>/// <param name="path"></param>/// <returns></returns>public static string GetConfig(){string configPath = AppDomain.CurrentDomain.BaseDirectory + "Config.json";         //配置文件路径try{FileStream fileStream = new FileStream(configPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);int seekLength = (int)(fileStream.Length);byte[] buffer = new byte[seekLength];fileStream.Read(buffer, 0, seekLength);fileStream.Close();                                 //读取文本数据之后马上释放资源return Encoding.Default.GetString(buffer);}catch (Exception ex){throw new Exception("读取【" + configPath + "】失败,失败原因:" + ex.Message);}}/// <summary>/// 获取IPV6/// </summary>/// <returns>有效IPV6地址</returns>public static string GetAddr(string mac){try{if (!string.IsNullOrEmpty(mac)){NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in nics){PhysicalAddress _mac = adapter.GetPhysicalAddress();                                             //网卡Mac地址if (_mac.ToString() == mac){IPInterfaceProperties ip = adapter.GetIPProperties();                                       //获取以太网卡网络接口信息                     UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;                   //获取单播地址集foreach (UnicastIPAddressInformation ipadd in ipCollection){if (ipadd.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)     //只获取IPV6{if (!ipadd.Address.ToString().ToLower().Contains("fe80"))                           //fe80开头的IP为无效IP{return ipadd.Address.ToString();}}}}}throw new Exception("本机不存在mac地址为:" + mac + "的网卡,请检查配置文件");}elsethrow new Exception("配置文件中mac为空,请检查配置文件");}catch (Exception ex){throw new Exception(ex.Message);}}}
}

windows环境下定时进行阿里云DDNS解析相关推荐

  1. 动态更新阿里云DDNS解析记录的IPv6地址,随时随地用域名远程访问自己的电脑【如何远程访问家里的电脑】

    远程访问电脑 日志 简介 要求 1. 获取两台电脑 2.IPv6网络 2.1检查光猫 2.2检查路由器 2.3配置电脑防火墙 2.3.1添加ICMPv6协议 2.3.2配置SMB协议 2.4配置远程桌 ...

  2. .net core 阿里云ddns解析

    前几天,oray免费的ddns域名解析挂了. 平时也不稳定,收费的太贵.决定弃用,并把之前的oray申请的顶级域名转到阿里云. 转出这里不详细说了,百度一搜一大把. 完成转出后,家里路由器并没有阿里云 ...

  3. Windows环境下通过SSH登录新浪云

    在后端系统开发中,开发完成之后,如果需要对外提供服务,需要部署到相应的对外公网服务器上.而作为个人开发者,或者测试用户,可以选用现在比较成熟的云,将代码托管,著名的有阿里云(需要备案),本文为了方便说 ...

  4. 腾讯云CMQ消息队列在Windows环境下的使用

    版权声明:本文由李少华原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/100 来源:腾云阁 https://www.qcl ...

  5. python3实现阿里云DDNS域名动态解析

    一. 前言 家里部署了一台NAS服务器,在公司平时都是通过IP访问的,现在想更改为用域名去访问,但是家里的宽带都是动态的公网IP,每次IP变了都需要手动解析一次域名,这样就比较麻烦,那怎么办了?这个时 ...

  6. 阿里云ddns,动态域名更新Python脚本,基于Python3,适用于linux

    阿里云ddns更新脚本,基于Python3 前提:已经在阿里云注册了一个域名,获得AccessKey ID AccessKey Secret,先添加了一个子域名解析,解析值随便 然后获取这个子域名的r ...

  7. turicreate 视频_人工智能图片分类器:turicreate在Windows环境下简明使用教程

    近几天笔者深入学习了下机器学习.深度学习,不论是谷歌围棋AIAlphaGo.还是目前使用的阿里云智能语音合成,都非常吸引人.连续多天的理论学习后,总体而言,绝大多数教程都围绕数学算法展开,而实际上我们 ...

  8. Windows环境下Composer的安装和使用说明,从零开始熟悉安装composer,不会者、不常用者和遗忘者的幸福

    [本文摘抄至网络-本人整理测试] 测试日志: 20220315测试:可用 Windows环境下Composer的安装和使用教程 (本人亲测可用) 下载前说明:建议先安装PHP环境,我安装的是PHP7. ...

  9. 阿里云DDNS(动态域名解析)获取解析并对比

    一.问题由来 昨天家里停电了,来电后IP地址改变了.但是并没有更新到域名解析数据上.所以感觉之前写的代码有一丝丝的不稳定. 今天重新写一个直接点的.直接查询域名服务器的解析地址,与本地公网IP地址比对 ...

  10. Windows环境下,如何在Docker里运行SAP UI5应用

    本文面向的读者是对Docker技术有一些基本概念,但因为没有测试环境,所以没有动手操作过的朋友们. 最近Jerry因为要做一个新的SAP云产品开发,得搭各种开发环境,其中之一就是Docker. Jer ...

最新文章

  1. pip install nmslib 失败 (error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1)
  2. druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索
  3. JDK文档中关于Semaphore的正确使用以及使用场景
  4. 练习11.1 奥运五环色 7-1 藏头诗
  5. VS2008系统开发背景图片的添加及注意事项
  6. 黑马程序员之SQL server基础学习笔记(三)
  7. 怎样手动给无线网设置一个DNS服务器地址,无线网的dns怎样设置.docx
  8. TCP三次握手建立连接和四次挥手关闭连接
  9. Flutter学习之事件循环机制、数据库、网络请求
  10. kotlin函数_Kotlin函数
  11. Facebook发区块链货币,这不就是Q币吗???
  12. eBPF技术应用云原生网络实践:kubernetes网络 | 凌云时刻
  13. 豆瓣 音乐和读书的搜索页的 window.__DATA__ 的解密
  14. 算法图解第一章笔记与习题(算法简介)
  15. 数据结构/排序/归并排序/二路归并排序
  16. ftp文件服务器编码,ftp服务器字符编码
  17. MySQL数据库下载与安装
  18. 电脑进不了系统的情况下如何重装win7,电脑无法开机如何重装win7
  19. 一加手机换鸿蒙os,一加手机支持氢OS和ColorOS一键切换?官方辟谣:太假了
  20. 微信公众号开发---微信开发学习路线(及供参考)

热门文章

  1. Xshell传输文件
  2. cad一直正在加载_cad一直加载打不开怎么办,cad打不开的四种解决办法
  3. 论文阅读:Bridging Knowledge Graph to Generate Scene Graph(ECCV20)
  4. matlab 汽车理论,汽车理论matlab作业
  5. 高性能图像放大算法——waifu2x方法
  6. 【汇编】从键盘输入16位有符号数x,y,z,w,编写程序实现:w=x+ y+24 - z,结果存放在w中, 并显示结果。
  7. android显示缩略图,Android:是否可以显示视频缩略图?
  8. 使用导入 Excel 的方式批量修改文件夹名称
  9. 文件夹内批量修改文件名称
  10. 未来十年计算机语言,随便聊聊中国未来十年热门的十大编程语言使用趋势