苏筱冰 发表于 2021-6-24 11:17

阿里云动态域名解析(开源) - NodeJS + 易语言

说到动态域名解析用过的人第一个想到的估计就是向日葵,但是向日葵总是故意解析127.0.0.2 昨天一天都这样到了晚上才恢复 这种现象已经不止出现了一次

所以我一气之下就自己写了一个使用阿里云域名解析到自己的家庭宽带公网IP

注意事项:家庭宽带一定要是公网IP,家庭宽带一定要是公网IP,家庭宽带一定要是公网IP,重要的事情说三遍


首先上NodeJS代码,我用的是 Express 框架,然后安装下 @alicloud/pop-core 就可以
accessKeyId和accessKeySecret去阿里云自己申请,建议使用子账号的分配权限即可

const express = require('express')
const api = express.Router()
const Core = require('@alicloud/pop-core')

var client = new Core({
        accessKeyId: '这里写你自己的accessKeyId',
        accessKeySecret: '这里写你自己的accessKeySecret',
        endpoint: 'https://dns.aliyuncs.com',
        apiVersion: '2015-01-09'
})

// 获取解析记录列表
api.post('/DescribeDomainRecords', async (req, res) => {
        var params = {
                "DomainName": "这里写你自己要解析的域名"
        }
        var requestOption = {
                method: 'POST'
        }
        await client.request('DescribeDomainRecords', params, requestOption).then((result) => {
                res.send(JSON.stringify(result))
        }, (ex) => {
                res.send(ex)
        })
})

// 修改解析记录
api.post('/UpdateDomainRecord', async (req, res) => {
        console.log(JSON.stringify(req.body))
        var params = req.body
        var requestOption = {
                method: 'POST'
        }
        await client.request('UpdateDomainRecord', params, requestOption).then((result) => {
                res.send(JSON.stringify(result))
        }, (ex) => {
                res.send(ex)
        })
})

module.exports = api

接下来是易语言的界面
主要功能就是定时获取本机公网IP和域名解析的ip,如果发现本机IP和域名解析IP不一致,那么就将本机的IP解析至域名,看图

软件打开会自动对比一次IP,之后24小时才会自动更新,手动点击刷新按钮也可以
时间方面源码里自行更改

对了还有个获取公网IP的事情说一下
一开始我是使用IP138获取公网IP的,但是我在调试的时候会频繁的访问获取IP,所以一段时间过后就无法访问了,要等待一段时间才能继续访问,亲测 我换了个IP就能访问了
所以用NodeJS写了一个获取公网IP的接口,直接在易语言里面调即可,下面贴代码
引入express 安装下public-ip即可
const express = require('express')
const api = express.Router()
const publicIp = require('public-ip')

api.get('/getPublicIp', async (req, res, next) => {
        await publicIp.v4().then(ip => {
      res.send(ip)
    })
})

api.post('/getPublicIp', async (req, res) => {
        await publicIp.v4().then(ip => {
      res.send(ip)
    })
})

module.exports = api

通过以上代码其实不需要易语言也可以搞定的,这个很简单就你们自己改了

下面是易语言代码,模块都是封装超级模块的,自己自行更换,皮肤模块自行删除引用和启动窗口子程序及销毁的调用代码,我也懒得改了

xiaoyuer27 发表于 2021-7-8 16:09

现在的IPV4已绝,家庭快带的IP基本已经是城域网的IP了,没有独立IP可言。

EliVenom 发表于 2021-7-9 16:40

xiaoyuer27 发表于 2021-7-8 16:09
现在的IPV4已绝,家庭快带的IP基本已经是城域网的IP了,没有独立IP可言。

是呀,我们这找移动宽带的客服要公网IP,要不到{:1_923:}

苏筱冰 发表于 2021-7-13 09:36

EliVenom 发表于 2021-7-9 16:40
是呀,我们这找移动宽带的客服要公网IP,要不到

移动联通可以试试是否本身就是公网IP
我刚架好联通网的时候不知道是否公网IP,打电话给联通客服,联通客服死活不愿意给公网IP,说一定要企业才能够申请公网IP,后来我自己偶然试了一下,已经就是公网IP

EliVenom 发表于 2021-7-13 11:57

苏筱冰 发表于 2021-7-13 09:36
移动联通可以试试是否本身就是公网IP
我刚架好联通网的时候不知道是否公网IP,打电话给联通客服,联通客 ...

好滴,非常感谢{:1_893:}!下班回家后试试

sdpc120 发表于 2021-7-16 22:10

我的云南电信宽带要到了公网ip,云南联通和移动都不给

n_g 发表于 2021-7-16 22:15

这样需要有台电脑一直开着才能行,有点浪费资源

爱妃!朕来了 发表于 2021-7-18 13:05

现在都是IPV6地址了,不要公网IP地址了

hjhboy 发表于 2021-11-25 00:52

正好需要感谢分享有了DDNS也要有80上行才行   不然作用不大

Ttl 发表于 2023-4-19 22:19

感谢分享
页: [1]
查看完整版本: 阿里云动态域名解析(开源) - NodeJS + 易语言