前言
在跟电信要到公网IP之后一个额外的问题随之而来:每次断网/重启路由器时我的公网IP都会发生变化。
为了解决这个问题在网上看了很多文章,发现大多数都在提用花生壳之类的内网穿透+域名解析,还有一些提到用DNSPod配合他们官方的api,可以方便+省钱。
但是我本着能白嫖就绝不花钱科研的精神发现了另一种思路,简单讲一下就是
轮询自己的公网IP,并在IP发生变化时给自己发一封邮件
实现流程
# 首先是装包,慎防有人像我一样菜到甚至没装过包
npm install email --save
npm install request --save
.js
var request = require('request')
var email = require("emailjs")
var currentIp, originIp
var emailServ = email.server.connect({
user: "test@163.com", // 邮箱账号
password: "xxx", // 授权码,不是邮箱密码
host: "smtp.163.com",
ssl: true
})
function getIp () { // 查询公网IP
request('http://ip.taobao.com/service/getIpInfo.php?ip=myip', (error, response, body) => {
if (!error && response.statusCode == 200) {
var ip = JSON.parse(body).data.ip;
currentIp = ip
}})
}
function sendEmail (ipaddr) { // 发送邮件方法
emailServ.send({
text: ipaddr,
from: "xxx@163.com", // 寄件人
to: "xxx@163.com", // 收件人
subject: "IpAddress" // 主题
}, (err, message) => {
console.log(err || message)
})
}
function mainInterval () {
getIp()
if (currentIp != originIp) {
console.log(originIp, '->', currentIp)
sendEmail(currentIp)
originIp = currentIp
}
}
setInterval(mainInterval, 600000) // 每10分钟轮询一次
#记得跑
node ip.js
就可以了。
Node刚入门,自认为上述代码还有很大的优化空间,恳请各位大佬指教!