跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 【教程】树莓派自动DDNS更新/dnspod
未分類
12 5 月 2021

【教程】树莓派自动DDNS更新/dnspod

imes 大佬有话说 :

【教程】树莓派自动DDNS更新/dnspod

手头上的树莓派4通过WIFI连接网络,因为是DHCP分配一个公网IP,所以想直接解析到固定域名上,避免每次链接的时候都要手动去看分配的IP。 此处使用的是dnspod家的服务,可以实现秒级解析。程序是python3写的,使用crontab的@reboot功能(如下,注意path路径)实现开机启动后获取IP并自动上报。为了方便查看和记录,也添加了将IP推送到telegram的功能(自建telegram机器人的教程,https://pa.ci/119.html)。原始链接https://pa.ci/136.html

@reboot /usr/bin/python3 /path/AutoDNS.py

Python3脚本如下,需要申请dnspod的login_token才能使用api,步骤参考官方教程 https://docs.dnspod.cn/account/5f2d466de8320f1a740d9ff3/ 。注意!此token只会出现一次,一定要复制下来保存好,并确保不会泄露。假设已经在dnspod里面解析过了raspi.domain.com,并且通过curl ‘https://dnsapi.cn/Domain.List’ -d ‘login_token=<login_token>&format=json’获取了domain_id,通过curl ‘https://dnsapi.cn/Record.List’ -d ‘login_token=<login_token>&format=json&domain_id=<domain_id>’获取了raspi.domain.com的domain_id。

import requests
import netifaces
import telebot
import time
import sys

# 等待10秒钟以便系统有足够的时间从路由器获取ip地址。sleep被loc的防火墙拦截了,需要的话,自己删空格。
time.s l e e p(10)

# 根据dnspod的api标准,需要添加User-Agent才能保证不会被封号,格式为:程序名称/版本号 (邮件地址)
headers = {‘User-Agent’: ‘RasPi Auto DDNS/1.0.0 ([email protected])’}

# 使用netifaces获取wifi被分配的IP,如果是网线则wlan0变成eth0,如果拿不到IP则退出程序
try:
    wlan_ip = netifaces.ifaddresses(‘wlan0’)[‘addr’]
except:
    sys.exit(0)

# 从dnspod里得到上次的IP,需要已经解析过次级域名,以raspi.domain.com为例。
url_list = ‘https://dnsapi.cn/Record.List’
data_list = {
    ‘login_token’: ‘123456,4aacc7629e9c7gh58b253cby97f43cdc’,
    ‘format’: ‘json’,
    ‘domain_id’: ‘12345678’,
    ‘sub_domain’: ‘raspi’,
    ‘record_type’: ‘A’
}

data_dns = requests.post(url=url_list, data=data_list, headers=headers).json()
list_ip = data_dns["records"]["value"]
# 对比此前的IP和现在获取的IP一致,不一致则更改dnspod里面的记录
if wlan_ip != list_ip:
    url_modify = ‘https://dnsapi.cn/Record.Modify’
    data_modify = {
      ‘login_token’: ‘123456,4aacc7629e9c7gh58b253cby97f43cdc’,
      ‘format’: ‘json’,
      ‘domain_id’: ‘12345678’,
      ‘record_id’: ‘123456789’,
      ‘sub_domain’: ‘raspi’,
      ‘value’: wlan_ip,
      ‘record_type’: ‘A’,
      ‘record_line’: ‘u9ED8u8BA4’
    }
    response_modify = requests.post(url=url_modify, data=data_modify, headers=headers)
    # 将信息推送到telegram上以便查看记录。如果不需要,可以从此处删除剩下的所有代码。
    TOKEN = ‘1689581149:AAGYVVjEHsaNjsnT8eQpWyshwr2o4PqU7u8’
    tb = telebot.TeleBot(TOKEN) text = "The DNS ip is: " + list_ip + " The IP of RasPi is: " + wlan_ip
    tb.send_message(387980691, text)
else:
    # 将信息推送到telegram上以便查看记录。可以删掉不要,如果需要可以参考电报机器人那里的教程。
    TOKEN = ‘1689581149:AAGYVVjEHsaNjsnT8eQpWyshwr2o4PqU7u8’
    tb = telebot.TeleBot(TOKEN) text = "The IP of RasPi does not change: " + wlan_ip
    tb.send_message(387980691, text)

myhost 大佬有话说 :

https://github.com/jeessy2/ddns-go

这个也不错

imes 大佬有话说 :

myhost 大佬有话说 : 2021-5-12 14:18
这个也不错

这个比我的脚本强大多了yc017t

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具