『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2104|回复: 1

[经验分享] open dns 已阵亡,导致 dnsip 无法正常工作,ddns更新失败

[复制链接]

80

主题

388

帖子

1672

积分

金牌会员

Rank: 6Rank: 6

积分
1672
金钱
1284
HASS币
0
发表于 2022-6-5 15:45:32 | 显示全部楼层 |阅读模式
本帖最后由 ciasdmxhxjjpd@c 于 2022-6-5 16:49 编辑

RT,

最近 发现重启路由后,ddns更新老是失败,查看了下流程,显示 unkonwn,说明 dns 解析失败了!

楼主,用的是 通过 dnsip 更新 cf ddns,https://bbs.hassbian.com/thread-16149-1-1.html
改成运营商的dns,解析不稳定,也存在污染。

所以,想了下,用命令行吧,直接从vps隧道获取解析地址吧,vps的dns 绑定在5300

sensor: 
  - platform: command_line
    name: myip
    command: "python /config/myip.py"
    scan_interval: 300
    
  - platform: command_line
    name: yourdomain
    command: "dig yourdomain @127.0.0.1 -p 5300 +short"
    scan_interval: 120
因,楼主是通过光猫拨号,n1旁路路由,所以,要通过 python 脚本获取 光猫拨号之后的 pppoe wanip(华为hs8145x6),当然,你也可以通过其他方式,楼主主要是不想泄露自己的ip。

import os
import pickle
import requests
import re
import base64
import urllib.parse
import codecs

DOMAIN = 'http://192.168.1.1:8080/'
USERNAME = 'user'
PASSWORD = 'password'
HEADERS = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate'
}


# get random
def get_random(session):
    cnt = session.get(url=DOMAIN + 'asp/GetRandCount.asp').content.decode('utf-8-sig')
    return cnt


# get login cookie
def get_cookie(session, cnt):
    payload = {'UserName': USERNAME, 'PassWord': base64.b64encode(str.encode(PASSWORD)), 'Language': 'chinese',
               'x.X_HW_Token': cnt}
    save_cookies(session.post(url=DOMAIN + 'login.cgi', data=payload).cookies, 'cookie.txt')


# get pppoe wan ip
def get_wanip(session):
    x = session.get(url=DOMAIN + 'html/bbsp/common/wan_list.asp', cookies=load_cookies('cookie.txt')).content.decode(
        'utf-8-sig')
    wanips = re.findall(
        'var PPPWanList = new Array\(new WanPPP\("InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","your adsl account"',
        x)
    return wanips


def save_cookies(cookiejar, filename):
    with open(filename, 'wb') as f:
        pickle.dump(cookiejar, f)


def load_cookies(filename):
    with open(filename, 'rb') as f:
        return pickle.load(f)


session = requests.Session()
session.headers = HEADERS

if not os.path.isfile('cookie.txt'):
    get_cookie(session, get_random(session))

wanip = get_wanip(session)

if not wanip:
    get_cookie(session, get_random(session))
    wanip_tmp = get_wanip(session)
    unescaped = urllib.parse.unquote(wanip_tmp[0][1])
else:
    unescaped = urllib.parse.unquote(wanip[0][1])

raw_bytes = bytes(unescaped, "utf-8")
decoded = codecs.escape_decode(raw_bytes)[0].decode("utf-8")
print(decoded)


微信截图_20220605154129.png

增加上面的支路,是为了确保能100%更新成功。


cf-ddns.json

6.05 KB, 下载次数: 0

评分

参与人数 1金钱 +20 收起 理由
+ 20 虽然看不懂,但感觉很厉害的样子。.

查看全部评分

回复

使用道具 举报

32

主题

1983

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
金钱
3050
HASS币
50
QQ
发表于 2022-6-5 19:09:51 | 显示全部楼层
谢谢大佬分享。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-19 11:54 , Processed in 0.078215 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表