一款DDNS工具

好久没有发blog了。在这期间并没有发生什么,一切还是和原来一样,坏的没有发生,好的也没有发生。就是有一些焦虑。

写了一款小工具,用新学的go语言。其实我从17年初就开始看go语言了,当时看《Go语言圣经》这本书中途断了就没接上来。等我18年初再想捡起来的时候就不想再看一遍书了,好歹前几章的基础语法还是掌握了的,过了一遍《go tour》,就直接上手写个小工具吧!

还是原来我比较熟悉的http服务通讯这一块。其实就是一个简单的http服务用来记录客户端的IP地址,然后利用DNSPOD的API来修改DNS的解析来达到动态域名的效果,并有通过Telegram Bot来提醒通知的功能。

这样一来一直闲置的树莓派又有发挥作用的地方了。通过定时向服务端发送信息,服务端记录IP信息,一旦IP信息变动就通过API直接修改,这样就可以通过域名访问家里的IP地址,从而访问家里的网络设备了。具体用处就不用我多介绍了,家里有个NAS 或者下载机、服务器什么的就可以方便的访问了。

我是通过以下步骤来保障服务器识别正确的客户端发来的消息的。

  1. 服务端和客户端提前设定好的一段字符A.
  2. 时间戳数值通过整除一个数值B得到结果C.这样在B秒内,服务端和客户端得到的结果C是一致的.
  3. 生成token.token=sha256(A+C).随着时间变化C是变动的,token每隔B秒会发生变动.
  4. 通过鉴定token来确定信息是否来自可信客户端.
  5. 使用https通讯防止中间人对信息的截获及篡改.

思路是根据两步验证的密码验证器所使用的方法,好像叫这个名字Time-based One-time Password

我将程序上传到了github上,详情查看这里:https://github.com/xavierskip/homeipkit

来吧,快来黑我吧!

Tag:programddnsgolang Published under (CC) BY-NC-SA