GithubHelp home page GithubHelp logo

newfuture / ddns Goto Github PK

View Code? Open in Web Editor NEW
4.2K 50.0 650.0 336 KB

:triangular_flag_on_post: 自动更新域名解析到本机IP(支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...)

Home Page: https://ddns.newfuture.cc/

License: MIT License

Python 93.82% Batchfile 1.33% Shell 4.43% Dockerfile 0.42%
ddns ipv6 ipv4 dns dnspod alidns dnscom cloudflare

ddns's People

Contributors

b1n23 avatar char-46 avatar chimaoshu avatar china-shang avatar cnwangjihe avatar codecor-cn avatar crazyboyfeng avatar dev-soragoto avatar ferricion avatar goldjohnking avatar gyf9835 avatar iiillliilliiill avatar jackhhh avatar keypj avatar laozhoubuluo avatar leadroyal avatar leonhardt92 avatar libkoi avatar mao13820 avatar mattholy avatar mem0rz avatar newfuture avatar nn708 avatar qhyou11 avatar qip avatar rxbit avatar tongyifan avatar xiongnemo avatar xufan6 avatar yhx5768 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ddns's Issues

cloudflare 更新问题

cloudflare更新时 会增加一条A记录 而不是修改原先A记录的值。暂时替换成旧版的cloudflare.py, 无问题

DNSPOD国际版(dnspod.com)

如题dnspod国际版好像没有API-token的相关操作说明呀?
还有如果支持的话要怎么操作呀?

大佬,新问题。中文域名的问题

========================= Tue Jun 26 23:14:11 2018 =========================
8.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
a.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
b.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
h.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
w.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
n.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
m.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
c.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
d.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
s.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
l.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
jet.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 4-5: ordinal not in range(128)
p.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
b.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
g.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
e.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
r.丨丅.com(A) ==> 182.140.53.81 [via DIRECT]
'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)

Docker支持

尝试为这个项目添加docker支持。

这是粗略的Dockerfile

FROM python:3.7-alpine

ENV LIBRARY_PATH=/lib:/usr/lib

WORKDIR /app

RUN echo https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.8/main > /etc/apk/repositories; \
    echo https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.8/community >> /etc/apk/repositories

RUN apk add --no-cache git && \
    git clone https://github.com/NewFuture/DDNS /app

ENTRYPOINT git pull && \
    python ./run.py -c /etc/ddns/config.json

使用的时候,只要把配置文件映射到容器的 /etc/ddns/即可。

但是发现这个只能执行一次,遂尝试运行tash.sh ,似乎只要把ENTRYPOINT改为 ./task.sh即可。

但是发现/task.sh里使用配置文件路径是程序的运行路径。所以如果要映射的话,就要映射整个app文件夹。 感觉不够优雅。

大佬 又是我 我又来了...task.bat没有正常运行

我这边刚刚手机发现又无连上PC的FTP了 查了下阿里云的控制台 发现解析IP一直没更新过 (之前昨天已经双击运行了) 我重试了双击运行 和管理员运行 均无效 均等待5-10分钟 没有更新 最后手动运行exe更新的...

华芸Asustor,SSL: CERTIFICATE_VERIFY_FAILED

我的机器是华芸的NAS,下载的是Linux的二进制文件,执行的适合报错了

ERROR:root:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)

是否支持windows通过pppoe拨号获取到公网ip地址

你好!
我对python不太懂,看了ip.py里面的源码,对于获取windows 本机ip地址源码不太懂。
想问下如果windows主机有多个网卡或有pppoe拨号,程序能自动识别那个网卡是公网的ip地址吗?

Cloudflare does not support deprecated TLS versions for security reasons. Please upgrade your client to TLS 1.2 or greater

运行版本:Windows,使用run.bat脚本运行。Python2.7.5,Windows10 1803
报错信息:{"success":false,"errors":[{"yourTlsVersion":"TLSv1", "message":"Cloudflare does not support deprecated TLS versions for security reasons. Please upgrade your client to TLS 1.2 or greater. See https://blog.cloudflare.com/deprecating-old-tls-versions-on-cloudflare-dashboard-and-api/ for more details."}]}
**运行中正确获取了v4v6地址
配置文件:
{
"debug": true,
"proxy": null,
"dns": "cloudflare",
"token": "——",
"id": "——",
"index4": "public",
"index6": "public",
"ipv4": [
——
],
"ipv6": [
——
]
}

看CF的文档,大概是从5月7日起drop掉了TLS 1.0/1.1对api.cloudflare.com的调用导致脚本运行失败

阿里云云解析不起作用

运行没有报错,日志里有update ipv4 to: XXX.XXX.XXX
还有很多行只输出了一个点
但是去查询发现并没有修改成功

cloudflare 双栈域名解析提示:The record already exists

ipv4更新正常,ipv6无法更新,提示记录已存在

日志:

Cache is disabled!

myhome.97admin.com(A) ==> 117.30.233.225 [via DIRECT]
2019-03-26 12:11:35,481 <cloudflare.update_record> 113@/root/DDNS/dns/cloudflare.py
[DEBUG] >>>>>myhome.97admin.com(A)
2019-03-26 12:11:35,481 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s  : params:{'per_page': 50}
2019-03-26 12:11:40,498 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s /89a0fe0d09762c557fd0c7799efb1c9a/dns_records : params:{'per_page': 100, 'type': 'A', 'name': u'myhome.97admin.com'}

www.meitu.live(A) ==> 117.30.233.225 [via DIRECT]
2019-03-26 12:11:43,814 <cloudflare.update_record> 113@/root/DDNS/dns/cloudflare.py
[DEBUG] >>>>>www.meitu.live(A)
2019-03-26 12:11:43,814 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s  : params:{'per_page': 50}
2019-03-26 12:11:45,156 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s /0fe2194dc96703f47b271b7ca7051110/dns_records : params:{'per_page': 100, 'type': 'A', 'name': u'www.meitu.live'}

ipv6.97admin.com(AAAA) ==> 240e:d2:3d15:b500:9e8e:99ff:fe14:a164 [via DIRECT]
2019-03-26 12:11:51,161 <cloudflare.update_record> 113@/root/DDNS/dns/cloudflare.py
[DEBUG] >>>>>ipv6.97admin.com(AAAA)
2019-03-26 12:11:51,161 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s  : params:{'per_page': 50}
2019-03-26 12:11:55,820 <cloudflare.request> 36@/root/DDNS/dns/cloudflare.py
[DEBUG] $s /89a0fe0d09762c557fd0c7799efb1c9a/dns_records : params:{'content': u'240e:d2:3d15:b500:9e8e:99ff:fe14:a164', 'proxied': False, 'type': 'AAAA', 'name': u'ipv6.97admin.com', 'ttl': 600}
{"success":false,"errors":[{"code":81057,"message":"The record already exists."}],"messages":[],"result":null}

Python支持

新版本是不是不支持python2了呢?报错
image

我有个需求想加入,不知道能不能帮我一下?

我想要在每次我的ip 更新的时候 执行一个 ssh 命令
类似这样
ssh -p 222 root@myserver ''service nginx restart"
@NewFuture, 不知道能不能加入这个啊,
或者能不能指点一下我在哪里加入啊,
起因是这样,
1.我用 vps 搭建的 nginx 反向代理给本地搞了个80出口
2.我是用的域名来代理的
3.每次本地 ip 更新后,nginx 并未更新,所以无法正确代理
4.需要每次 ip 更新后,重启 nginx.
:)

Specified signature is not matched

WARNING:root:GetMainDomainName : error:b'

{"Recommend":"https://error-center.aliyun.com/status/search?Keyword=SignatureDoesNotMatch&source=PopGw","Message":"Specified signature is not matched with our calculation. server string to sign is:POST&%2F&AccessKeyId%3DLTAIlFW9Sddoh5pV%26Action%3DGetMainDomainName%26Format%3Djson%26InputString%3Djokor.vip%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D217f3bb4-f3e6-4479-9bac-2bfa68122c54%26SignatureVersion%3D1.0%26Timestamp%3D2019-05-12T14%253A06%253A51Z%26Version%3D2015-01-09","RequestId":"1DD9FD9A-8E57-43E5-B911-E4F5AD2027F7","HostId":"alidns.aliyuncs.com","Code":"SignatureDoesNotMatch"}

请问这个问题是什么原因呢

cloudflare更新失败

您好,请问为什么对于cloudflare更新已存在的dns_record时,会出现如下错误
frps.wangjihe.cf(A) ==> 14.157.114.33 [via DIRECT]
{"success":false,"errors":[{"code":81057,"message":"The record already exists."}],"messages":[],"result":null}
pt0.wangjihe.cf(A) ==> 14.157.114.33 [via DIRECT]
{"success":false,"errors":[{"code":81057,"message":"The record already exists."}],"messages":[],"result":null}
ssh.wangjihe.cf(A) ==> 14.157.114.33 [via DIRECT]
{"success":false,"errors":[{"code":81057,"message":"The record already exists."}],"messages":[],"result":null}
mail.wangjihe.cf(A) ==> 14.157.114.33 [via DIRECT]
{"success":false,"errors":[{"code":81057,"message":"The record already exists."}],"messages":[],"result":null}

大佬请问我这边下载了win单文件运行后 配置了json文件

按照格式配置后 管理员运行exe文件 只是闪一下 窗口就关闭了 阿里云控制台也没有更新 是怎么回事 我这边是关闭了ipv4解析 只用了V6

配置如下
{
"$schema": "https://ddns.newfuture.cc/schema.json",
"debug": false,
"dns": "alidns",
"id": "LTAIbB2359P07jpK",
"index4": "false",
"index6": "default",
"ipv4": [
"newfuture.cc",
"test-pc.newfuture.cc"
],
"ipv6": [
"mxxxx.xxxxxx.xxxxx",
],
"proxy": null,
"token": "xxxxxxxxx"
}
貌似和您示例中顺序不一样 我运行exe生成的json打开就是这个格式

麻烦您更新下指定网卡获取公网ipv6地址

"index6": "public",
改为
"index6": 2,
会报
Traceback (most recent call last):
File "run.py", line 151, in
File "run.py", line 147, in main
File "run.py", line 104, in update_ip
File "run.py", line 71, in get_ip
File "util/ip.py", line 32, in local_v6
File "socket.py", line 748, in getaddrinfo
socket.gaierror: [Errno -2] Name or service not known
[22422] Failed to execute script run

ip没变化下启动报错

Traceback (most recent call last):
File "/home/ddns/run.py", line 91, in
main()
File "/home/ddns/run.py", line 86, in main
update_ip('4', cache, dns)
File "/home/ddns/run.py", line 60, in update_ip
print (dns.update_record(domain, value, record_type=record_type))
File "/home/ddns/dns/dnspod.py", line 164, in update_record
sub_domain=sub, record_type=record_type, record_line="默认", ttl=600)
File "/home/ddns/dns/dnspod.py", line 61, in request
raise Exception(data.get('status', {}))
Exception: {u'message': u'Domain record already exists', u'code': u'104', u'created_at': u'2017-09-04 15:13:33'}

centos 7.6下2.6.4 报SSL: CERTIFICATE_VERIFY_FAILED

2019-06-17 12:57:01,025 <dnspod.update_record> 145@dns/dnspod.py
[INFO] >>>>> x.example.com (A)
2019-06-17 12:57:01,025 <dnspod.request> 38@dns/dnspod.py
[INFO] Domain.Info : params:{'domain': 'example.com', 'login_token': '***', 'format': 'json'}
2019-06-17 12:57:01,575 <run.change_dns_record> [email protected]
[ERROR] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)
2019-06-17 12:57:01,576 <cache.sync> 85@util/cache.py
[DEBUG] save cache data to /tmp/ddns.cache

请问如何区分子域名和跟域名呢

使用子域名总提示不存在 谢谢
ddns.exe
========================= Wed Sep 26 15:02:33 2018 =========================
s.fpga.net.cn(A) ==> 202.105.47.131 [via DIRECT]
{u'message': u'Domain name invalid, please input tld domain', u'code': u'8', u'created_at': u'2018-09-26 15:02:32'}

CI 自动编译和发布

编译和二进制发布持续集成

  • build on linux (travis-CI)
  • build on windows (azure piplines)
  • build on mac
  • linux release (travis)
  • mac auto release
  • windows auto release (azure)

建议将此脚本提交至此页面

我很喜欢这个脚本,尤其是支持分开配置IPv4与IPv6,很有用。
DNSPod的API页面,有一个专门的版块,用来放置优秀的第三方项目,希望作者能联系官方人员,让此项目出现在这个页面上。

IPV4 DDNS 上报 错误

您好,在启动后出现如下错误:
b'{"success":false,"errors":[{"code":1004,"message":"DNS Validation Error","error_chain":[{"code":9005,"message":"Content for A record is invalid. Must be a valid IPv4 address"}]}],"messages":[],"result":null}'

用的是API的公网IP那挡

请问是否为Bug,以及其是否有解决方案?谢谢!!!

Windows下监听ip变化的一个设想

windows 下有个函数

NotifyIpInterfaceChange

使用这个函数可以监听到ip的变化(Windows Vista 及 Windows Server 2008 之后的版本),我看作者实现监听ip变化的原理是5分钟循环检测。可不可以在5分钟循环的基础上再加上使用这个API。这样的话会更加及时的检测到ip的变化。

Cloud flare 根域名判断和ZoneID获取

DDNS/dns/cloudflare.py

Lines 68 to 78 in c94fe05

def get_zone_id(domain):
"""
切割域名获取主域名ID(Zone_ID)
https://api.cloudflare.com/#zone-list-zones
"""
if len(domain.split('.')) > 2:
main = domain.split('.', 1)[1]
else:
main = domain
res = request('GET', '', name=main)
zoneid = res[0].get('id')

@tongyifan
这里判定根域名是有问题的,
常见的根域名可能是三级的如domain.net.cn 这个会无法解析

https://api.cloudflare.com/#zone-list-zones

Cloud Flare的API可以一次拉取整个List(max=50):

  1. 遍历整个List(数组)
  2. 逐个name检查是否满足domain.endswith(name)
  3. 满足条件即为所查找的ID

修改代码

zones = request('GET', '', per_page=50) 
zone = next((z for z in zones if domain.endswith(z.get('name'))), None)
zoneid = zone and zone['id']

@tongyifan 有空测试验证一下

启动报错

Traceback (most recent call last):
File "/home/ddns/run.py", line 91, in
main()
File "/home/ddns/run.py", line 74, in main
dns = getattr(import('dns', fromlist=[dns_provider]), dns_provider)
TypeError: Item in ``from list'' must be str, not unicode

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.