域名动态解析到动态IP

来源:互联网 发布:mysql安装教程5.7.20 编辑:程序博客网 时间:2024/05/21 15:02

一般宽带用户的IP都是动态IP,重连之后IP可能会发生变化。
如果想在其他地方连接家里的设备,或者在家中搭建服务器,就会受到影响。
现在提供一种动态解析域名的方式,只要检测到IP的变化,那么就调用阿里云的开放api,更新域名解析

github(欢迎star):https://github.com/liuyinglong/aliyun;
npm(aliCloudClient):https://www.npmjs.com/package/aliyun-apisign

说明

每分钟获取一次公网 IP,如果检测到公网IP发生了变化,则调用aliyun的开放接口进行更新

let AliCloudClient = require("../aliCloudClient");let Req = require("../request");let request = new Req();let schedule = require("node-schedule");let aliClient = new AliCloudClient({    AccessKeyId: "your AccessKeyId",    AccessKeySecret: "your AccessKeySecret",    serverUrl: "http://alidns.aliyuncs.com"});let domainNameValue = "www";let recordId,       //记录ID    ip;function getMyIp() {    return request.post("http://ip.taobao.com/service/getIpInfo2.php", {        ip: "myip"    }).then(function (data) {        return data.body.data.ip;    }).catch(function (err) {        return Promise.reject(err);    })}function getDomainRecords() {    return aliClient.get("/", {        Action: "DescribeSubDomainRecords",        SubDomain: "www.yourDomain.cn"    }).then(function (data) {        let body = data.body;        let record = body.DomainRecords.Record[0];        recordId = record.RecordId;        return record.Value;    }).catch(function (err) {        return Promise.reject(err);    })}function upDateRecords() {    return aliClient.get("/", {        Action: "UpdateDomainRecord",        RecordId: recordId,        RR: domainNameValue,        Type: "A",        Value: ip    }).then(function (data) {        console.log(new Date() + ip + " 修改成功");    }).catch(function (err) {        console.log(err)    })}function watchIpChange() {    return getMyIp().then(function (tempIp) {        if (ip === tempIp) {            return;        }        if (!ip) {            return;        }        console.log(new Date()+ ip + "=>"+ tempIp);        ip = tempIp;        upDateRecords();    }).catch(function(err){        console.log(err);    })}Promise.all([getMyIp(), getDomainRecords()]).then(function (result) {    ip = result[0];    let domainValue = result[1];    if (ip !== domainValue) {        upDateRecords();    }});schedule.scheduleJob("0 * * * * *", function () {    watchIpChange();});
原创粉丝点击