Linux 纯 Shell 实现 DNSPod 动态域名
侧边栏壁纸
  • 累计撰写 170 篇文章
  • 累计收到 176 条评论

Linux 纯 Shell 实现 DNSPod 动态域名

若海
2013-03-29 / 91 评论 / 47,324 阅读 / 正在检测是否收录...

开发背景:

公司有台嵌入式拨号上网设备,内置busybox和完整wget命令(支持https协议),但没有curl、python、ruby、php等扩展工具可用。网上现有基于DNSPod实现的Linux脚本无法在该设备上运行,于是写了个Shell版动态域名客户端(ddnspod),现在发布出来希望能给需要的朋友带来一些方便。

项目源码:

https://github.com/rehiy/dnspod-shell

DnsPod官方文档

https://support.dnspod.cn/Support/api

功能介绍:

  • 优雅的函数封装,灵活的更新策略
  • 基于DNSPod最新用户API实现动态域名客户端
  • 支持基于系统计划任务实现更新,防止脚本意外终止
  • 可运行于多数类unix系统中,包括部分嵌入式小型系统
  • 依赖sed/wget/nslookup命令,wget也可使用curl替代

常见问题:

record line invailid 将脚本保存为utf-8格式即可
Record id invalid 检查账号权限、是否冲突等

0

评论 (91)

取消
  1. 头像
    danis
    Windows 10 · Google Chrome

    我也一样是报错 get record info failed。

    回复
  2. 头像
    rong
    Windows 10 · FireFox

    我也一样是报错 get record info failed。

    回复
  3. 头像
    rong
    Windows 10 · FireFox

    经测试 a.abc.com 二级域名会出现 get record info failed abc.com 根域名不会

    回复
  4. 头像
    rong
    Windows 10 · FireFox

    目前免费的DDNS 的TTL最低只能写到600秒,是不是这个原因导致报错 get record info failed。

    回复
    1. 头像
      若海 作者
      Windows 10 · Google Chrome
      @ rong

      可能和api变更有关系,你更新到最新的版本了么

      回复
      1. 头像
        rong
        Windows 10 · QQ Browser
        @ 若海

        是最新版的,

        最近更新
        2020/1/1

        适配新版API(2019-11-26)
        当wget不存在时,尝试使用curl提交
        由于readlink不可靠,更改为手动设置路径
        当无法从本地网卡获得外网ip时,尝试从外部api获取

        回复
        1. 头像
          若海 作者
          Windows 10 · Google Chrome
          @ rong

          上个月合并了一个pull,解决这个问题

          回复
  5. 头像
    杨小果子
    Windows 10 · Google Chrome

    因为ipv6有三个地址
    (第一个)inet6 240e:000:000a:26c0::114 prefixlen 128 scopeid 0x0
    (第二个)inet6 240e:000:000a:26c0:25dd:f3b1:7f79:d4d6 prefixlen 64 scopeid 0x0
    (本地地址)inet6 fe80::ac5b:4331:5f5d:115b prefixlen 64 scopeid 0x20
    shell会自动上传第一个v6地址,导致无法联通,如何修改为上传第二个v6地址呢

    回复
    1. 头像
      若海 作者
      Windows 10 · Google Chrome
      @ 杨小果子

      用 计算下长度,排除掉一个

      回复
  6. 头像
    YB
    Windows 10 · Google Chrome

    arDdnsIds - {"status":{"code":"8","message":"\u57df\u540d\u4e0d\u6b63\u786e\uff0c\u8bf7\u8f93\u5165\u4e3b\u57df\u540d\uff0c\u5982 dnspod.cn","created_at":"2021-08-15 01:34:34"}}

    回复
  7. 头像
    qin.cj
    Windows 10 · Google Chrome

    大佬们,这是什么问题啊???
    Domain Ids: arDdnsIds - {"status":{"code":"10","message":"\u8bb0\u5f55\u5217\u8868\u4e3a\u7a7a","created_at

    回复
    1. 头像
      qin.cj
      Windows 10 · Google Chrome
      @ qin.cj

      解决了,是网卡选的不对。
      //运行ifconfig,查看具有IPv6地址的网卡设备名,例如eth0等
      //ddnspod.sh 69行,将 eth0 替换成本机的网卡设备名。确保单独运行该命令可以返回ipv6地址

      回复
      1. 头像
        若海 作者
        Windows 10 · Google Chrome
        @ qin.cj

        好的

        回复
    2. 头像
      若海 作者
      Windows 10 · Google Chrome
      @ qin.cj

      可能需要选择网卡

      回复
  8. 头像
    djxyy
    Windows 10 · Google Chrome

    ddnspod.sh: line 14: arDdnsCheck: not found
    这是未获取到我的域名吗?是因为dnspod的api使用https的原因吗?我该如何解决?

    回复
    1. 头像
      若海 作者
      Windows 10 · Google Chrome
      @ djxyy

      可能是缺少了函数文件,你把项目里的2个脚本放一起即可

      回复
  9. 头像
    深海
    Windows 10 · Google Chrome

    昨天还可以用,今天出现了Host Ip: arWanIp4 - Can't get ip address,问下咋回事,我直接进入https://v4.myip.la等个几秒也能出ip地址,为啥报错了呢

    回复
    1. 头像
      若海 作者
      Windows 10 · Google Chrome
      @ 深海

      脚本优先使用本地wan的ip,获取不到,才会从接口获取。可以更换一个你本地打开快一点的接口试试

      回复
      1. 头像
        脆皮
        Windows 10 · Google Chrome
        @ 若海

        我也是遇到同样的情况,换了其他接口也是一样,https://v4.myip.la我本地秒开,但是还是显示Host Ip: arWanIp4 – Can’t get ip address

        回复
        1. 头像
          若海 作者
          Windows 10 · Google Chrome
          @ 脆皮

          我排查下看看

          回复