windows环境下定时进行阿里云DDNS解析

2023-05-16

前言

        在国内想要申请公网的IPV4,机会渺茫,不过还好,现在三大运营商基本上都已经提供了IPV6了,等于给我们留了另外一条路,这次在做映射时,从网上找了些资料,发现几乎都没有公开源码,我对安全隐私方面还是比较讲究的,所以只能自己动手写一个了,希望可以帮助到相应的人。相应的源码请查看连接:(29条消息) AliDDNS.rar-网络基础文档类资源-CSDN文库icon-default.png?t=LA92https://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)icon-default.png?t=LA92https://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)icon-default.png?t=LA92https://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,                                              //需要修改的IP
                        RecordId = 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;         //软件级BUG
                case "info": logger.Info(msg); break;           //运行BUG
                case "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 + "的网卡,请检查配置文件");
                }
                else
                    throw new Exception("配置文件中mac为空,请检查配置文件");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows环境下定时进行阿里云DDNS解析 的相关文章

  • 为编辑器TeXworks添加命令biber

    目前 xff0c 在包biblatex日渐成为流行的参考文献处理机制下 xff0c 与其配合使用的编译命令biber也也就开始流行了 在console中手工输入这个命令编译没问题 xff0c 但显得不那么方便 最好将其集成到某个图形化的编辑
  • 一个简单的、基本的、完整的使用biblatex包的例子

    1 介绍 写论文离不开参考文献 xff0c 尤其是毕业论文 由相应的写作软件自动地管理这些参考文献 xff0c 并自动地呈现在论文中至关重要 大家都知道 xff0c 手工添加文献到论文中 xff0c 是枯燥乏味的 xff0c 更为致命的是这
  • Anaconda无法用PIL,我用Pillow替代

    1 问题描述 我想利用文字生成图片信息 xff0c 以方便运行 L A T E X 的加载图片的demo 我自然想到了利用Python来执行这个任务 xff0c 因为它是我使用过的众多编程语言中的最喜欢的语言之一 xff0c 可以用爱不释手
  • 解决DELETE PUT请求方式无法提交表单数据的问题

    1 在web xml中配置过滤器 span class hljs comment lt 将POST请求转化为DELETE或者是PUT 要用 method指定真正的请求参数 gt span span class hljs tag lt spa
  • 使用tinode架设自己的私有聊天服务

    需求 国内的商用im软件都不是开源客户端 xff0c 谁也不知道他们到底干了点啥撒 有时还是需要私有云im来保证数据安全 xff0c 比如我们需要传递账号以及密码等 xff1b 方案1 xff1a 使用网页工具将文本加密 xff0c 然后复
  • Apache httpd 目录列表禁用配置(options indexes)

    Apache httpd服务器在缺省的情况下 xff0c 开启了基于目录列表的访问 xff0c 这是一个存在安全隐患的问题 xff0c 因此可以关闭这个功能 在Apache 2 4的版本中 xff0c 不在支持使用 indexes来配置 x
  • ios 谓词

    1 比较运算符 gt lt 61 61 gt 61 lt 61 61 可用于数值及字符串例 xff1a 64 34 number gt 100 34 2 范围运算符 xff1a IN BETWEEN例 xff1a 64 34 number
  • 三大分布

    三大抽样分布 编辑 三大 抽样分布一般是指卡方分布 xff08 2分布 xff09 t分布和F分布 简介 编辑 如图 三大抽样分布 5张 2分布 编辑 定义 设 X 1 X 2 X n 相互独立 都服从标准正态分布N 0 1 则称 随机变量
  • linux 相关:ubuntu 设置 .bashrc之后 重登不起作用

    ubuntu 设置 bashrc之后 重登不起作用 1 问题2 原因3 解决 1 问题 用户身份登陆ubuntu服务器 xff0c 用户目录新建 bashrc文件并source之后设置生效 xff0c 但是使用ssh重登之后发现之前的设置不
  • 在PPPoE拨号环境下实现基于前缀委派(PD)的IPv6(H3C设备)

    本文于2020年4月成文 2020年9月12日修订 之前写过一篇 在PPPoE拨号宽带上使用IPv6 xff08 Cisco路由器 xff09 xff0c 今天就H3C设备又写了一篇 使用此配置 xff0c H3C路由器 xff08 或其他
  • 【已失效】创维DT741-csf光猫管理员/root超级密码获取方法

    厂商已经升级软件 xff0c 本方法已经失效 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • 解决JAVA“无法验证证书。将不执行该应用程序。”提示

    笔者的一台电脑安装了Java 8 update 361 需要使用UBNT网桥上的AirView应用 xff08 JAVA xff09 xff0c 但运行时提示 xff1a 应用程序出于安全原因被阻止 无法验证证书 将不执行该应用程序 名称
  • DES密钥的校验位(parity bit)

    DES密钥 xff0c 每个字节的最低比特为校验位 xff08 parity bit xff09 定义于ANSI X3 92 1981 xff08 现为ANSI INCITS 92 1981 xff09 xff0c 第3 5节 xff1a
  • Sybase使用sp_helptext查看系统存储过程的源码

    sp helptext存储过程用于显示已编译对象的源代码 sp helptext是Sybase ASE内置的存储过程 xff0c 可从任何位置调用 但实际上 xff0c 如果直接使用 xff0c 常常会得到 xff08 令人头大的 xff0
  • 使用Sybase sp_recompile重新编译存储过程和触发器

    Sybase 15 X中提供了内置的存储过程sp recompile 该存储过程可令表中的存储过程和触发器在下次使用时重新编译 xff08 Causes each stored procedure and trigger that uses
  • 2.1.4 VLSM和CIDR技术

    IP地址表示了IP网络中的一个通信实体 xff0c 一台主机可以有多个IP地址 IP分组中的IP源 目的地址在网络传输过程中保持不变 xff0c 因而总是由确定的源通信实体送往指定的目的通信实体 一个IP地址必须指名两点 xff1a 属于哪
  • VOR/DME进近与ILS进近的不同之处(摘录转载feeyo.com)

    问 xff1a 最近连续几次上班都遇到飞机作VOR DME 进近 xff0c 发现相对ILS xff0c 飞机入口高度都有点偏高 xff0c 速度也大 xff0c 很多跑道头脱离的 所以 xff0c 我想请教下各位FF xff0c 能都给小
  • Vista下AD1980/AD198X声卡驱动

    一直以来 xff0c AD198X声卡并无官方驱动 由于此型号芯片太老 xff0c 大多数OEM厂也停止对它的支持 如果使用XP下的驱动来强行代替 xff0c 会出现爆音以及设备间歇性失效的问题 使用RT的AC97 codec来代替 xff
  • python opencv cython

    在python中import cython编译的 so文件时报错 ImportError salmetric so undefined symbol ZN2cv12 OutputArrayC1ERNS 3MatE 解决方法见4 1 ldd
  • 关于 Windows照片查看器/图片查看器 颜色不准、存在色差的问题的解决方法

    多次遇到过这个现象 xff0c 就是用windows照片查看器 图片查看器 xff0c 显示的照片颜色不准 xff0c 跟用Photoshop校正过的显示或者IE浏览器中的显示 xff0c 存在明显的色差 这个情况出现的具体原因目前尚未能知

随机推荐

  • “此工作站和主域间的信任关系失败”之解决

    某虚拟化的域控制器出现严重故障以至于不可修复 xff0c 故使用之前Hyper V中导出的备份恢复了域控制器 恢复后基本功能正常 xff0c 但部分工作站登录时提示 此工作站和主域间的信任关系失败 解决方案 0 必须确保故障工作站没有其他的
  • go语言操作数据库

    由于项目需要 xff0c 研究了一下golang操作数据库的基本方式 操作环境在macos上 1 首先连接数据库 mysql u root p 2 选择数据库 use test 3 创建一个我们需要测试的user表 CREATE TABLE
  • Python从Excel表格中读取日期格式遇到的问题及对策

    在从Excel表中读取基金交易明细过程中 xff0c 交易日期的读取一直卡壳 Excel表中的日期是格式良好的2019 10 11 xff0c 但是读取到了Python中就成了43749 0 这一个数字怎么转换成正确的日期格式呢 xff1f
  • 升级笔记本硬件并安装Debian的过程

    前面说过了手头有个Win10笔记本 xff0c 华硕顽石FL8000U型号 xff0c 4G DDR4 2400MHz 威刚内存 xff0c 1T机械硬盘 xff0c 比较鸡肋 xff0c 开机速度比较慢 xff0c Win10登录界面还会
  • 转载:解决wps linux中字体缺失以及文字体名字全是英文的问题

    第一部分 xff1a 字体缺失问题 可能是版权原因 xff0c Linux中许多字体是没有的 xff0c 可以从Windows系统的Windows Fonts文件夹中 xff0c 复制所需的ttf字体文件到Linux系统的 usr shar
  • 无线键鼠接收器配对怎么就那么难?简直就是浪费

    手头无线键鼠套装 无线鼠标等设备比较多 xff0c 基本每台笔记本都有一套 品牌主要以雷柏和罗技为主 xff0c 罗技主要是鼠标 xff0c 此文不涉及 有一套雷柏的无线键鼠套装 xff0c 因为使用多年 xff0c 鼠标失灵已经扔了 xf
  • 亲测有效的下载微信公众号推文视频的一种方法。

    微信公众号推送的内容也有比较精华的 xff0c 特别是一些演讲视频 与其收藏积灰 xff0c 还不如下载保存 以此篇公众号推文为例 xff1a https mp weixin qq com s qkXLmTqBSAox3gx1yJWsNQ
  • Debian8 jessie 的官方源(备份)

    在非常旧的笔记本上安装了Debian8 然后为了安装速度 xff0c 取消了网络镜像源 又因为中文乱码问题 xff0c 没法更新语言包 加了阿里云 清华 网易等等的jessie软件源后 xff0c 都提示有问题 xff0c 怀疑是不是不支持
  • 更改LXDE的语言为中文

    之前给旧笔记本安装了Debian8 43 LXDE嘛 xff0c 运行比较流畅 安装过程中本想选择中文的 xff0c 但是安装界面中旧有中文乱码 xff0c 所以还是选了英语 等装好了系统 xff0c 把apt update 43 upgr
  • nn.ModuleList和nn.Sequential的理解

    nn ModuleList和nn Sequential的出现是为了使代码简洁 nn ModuleList使对于加入其中的子模块 xff0c 不必在forward中依次调用 nn Sequentialt使对于加入其中的子模块在forward中
  • 红米K40 Pro+5G手机出现电量显示故障的修复

    前两天的某天早晨 xff0c 插了一夜充电器的红米手机电量竟然依然是27 xff0c 比昨晚充电时更少了 摸摸手机也凉凉的 xff0c 看来充电器并未工作 然后就心慌慌的带着手机开了省点模式去上班 xff0c 一路上正常 到了单位后 xff
  • Debian安装myBase8.2 Beta-10的各种踩坑

    先去官网下载Linux的压缩包 xff0c 官网下载页面 for Linux amd64 Ver 8 2 Beta 10 tar xz32MB 然后放到home目录下 xff0c 解压 tar xJf myBase tar xz 得到一个M
  • ArchLinux的安装

    安装虚拟机的时候报了一个错误 xff1a this kernel requires an x86 64 cpu but 该原因 xff1a 操作系统是32位 xff0c 虚拟机的系统镜像是64位的虚拟机配置问题电脑没有开启虚拟化 我在安装的
  • iOS 第13课 使用XIB可视化编辑界面

    xcode XIB 基础 0 和android 里面的preview 一样 xff0c 可以看到同时操作添加和修改视图的位置 1 有一点和 android 比较像的是设置主视图 xff0c 我们可以在我们的项目点击 xff0c 然后是 Ma
  • java excel设置row 里面的宽度自适应

    row 61 sheet createRow i 43 1 HSSFCellStyle cellStyle 61 wb createCellStyle cellStyle setWrapText true row setRowStyle c
  • 看完就会----VSCode配置环境(gcc编译器)

    文章目录 一 xff0c 前言二 xff0c 配置的心酸过程1 xff0c 先下载Mingw642 xff0c 解析一下方框的内容3 xff0c 下载解压和配置 三 xff0c 结束语 一 xff0c 前言 当我们下载完了VSCode运行C
  • vue项目中 使用 websocket

    Websocket是一个持久化的协议 xff0c HTTP是不支持持久连接的 Websocket其实是一个新协议 xff0c 跟HTTP协议基本没有关系 xff0c 只是为了兼容现有浏览器的握手规范而已 比如说我们现在有个需求 实时获取一个
  • SSH客户端常用工具SecureCRT操作

    1 1 SecureCRT工具介绍 SecureCRT是一款支持SSH xff08 SSH1和SSH2 xff09 协议的终端仿真软件 xff0c 常被用来 运行于Windows下远程登录UNIX或Linux服务器 SecureCRT软件功
  • ubuntu apt-get update 失败解决。

    当运行apt get update后出现如下错误时 xff1a E Some index files failed to download they have been ignored or old ones used instead 可以
  • windows环境下定时进行阿里云DDNS解析

    前言 在国内想要申请公网的IPV4 xff0c 机会渺茫 xff0c 不过还好 xff0c 现在三大运营商基本上都已经提供了IPV6了 xff0c 等于给我们留了另外一条路 xff0c 这次在做映射时 xff0c 从网上找了些资料 xff0