newfuture / ddns Goto Github PK
View Code? Open in Web Editor NEW:triangular_flag_on_post: 自动更新域名解析到本机IP(支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...)
Home Page: https://ddns.newfuture.cc/
License: MIT License
:triangular_flag_on_post: 自动更新域名解析到本机IP(支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...)
Home Page: https://ddns.newfuture.cc/
License: MIT License
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
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'}
命中缓存能不能换个提示方式,输出一个点,意思不明确 ,希望修改为,无需更新之类的
还有就是不用缓存可以咩,去DNS上面查。
https://api.cloudflare.com/#dns-records-for-a-zone-dns-record-details
Lines 68 to 78 in c94fe05
@tongyifan
这里判定根域名是有问题的,
常见的根域名可能是三级的如domain.net.cn
这个会无法解析
https://api.cloudflare.com/#zone-list-zones
Cloud Flare的API可以一次拉取整个List(max=50):
domain.endswith(name)
修改代码
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
我很喜欢这个脚本,尤其是支持分开配置IPv4与IPv6,很有用。
DNSPod的API页面,有一个专门的版块,用来放置优秀的第三方项目,希望作者能联系官方人员,让此项目出现在这个页面上。
你好!
我对python不太懂,看了ip.py里面的源码,对于获取windows 本机ip地址源码不太懂。
想问下如果windows主机有多个网卡或有pppoe拨号,程序能自动识别那个网卡是公网的ip地址吗?
如题dnspod国际版好像没有API-token的相关操作说明呀?
还有如果支持的话要怎么操作呀?
大佬,缓存有时候不更新,然后导致我 实际ip 变了以后,dns 解析不更新。
"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
www.xxx.net(A) ==> 11.128.18.61 [via DIRECT]
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local
issuer certificate (_ssl.c:1056)
运行于Windows 2012
========================= 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)
大佬有空编译下arm arm64 mips呜呜呜
您好,在启动后出现如下错误:
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,以及其是否有解决方案?谢谢!!!
编译和二进制发布持续集成
通过主机名获取ipv6
如何更改为1秒?
PS:我的DNS是付费用户,可以设置为1秒~~
应该是缓存文件没找到
抱歉,看了一下配置说明,没有看到怎么绑定内网IP。
时需要源代码运行吗
如题,配置文件如下:
`{
"$schema": "https://ddns.newfuture.cc/schema.json",
"debug": false,
"dns": "alidns",
"id": "1234Ip",
"index4": 0,
"index6": false,
"ipv4": [
"122.123jol.top"
],
"ipv6": [
],
"proxy": null,
"token": "12345"
}`
谢谢大佬
config.json貌似不能同时写入多个dns服务商
请问 支持windows2003么?
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fa
iled: unable to get local issuer certificate (_ssl.c:1
045)
尝试为这个项目添加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文件夹。 感觉不够优雅。
谢谢
大佬,你看下我用来更新 dnspod,更新成功了,但是更新后就出现<urlopen error [Errno -5] No address associated with hostname>,然后ddns 的进程就挂了,是什么原因呢
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}
我想要在每次我的ip 更新的时候 执行一个 ssh 命令
类似这样
ssh -p 222 root@myserver ''service nginx restart"
@NewFuture, 不知道能不能加入这个啊,
或者能不能指点一下我在哪里加入啊,
起因是这样,
1.我用 vps 搭建的 nginx 反向代理给本地搞了个80出口
2.我是用的域名来代理的
3.每次本地 ip 更新后,nginx 并未更新,所以无法正确代理
4.需要每次 ip 更新后,重启 nginx.
:)
cloudflare更新时 会增加一条A记录 而不是修改原先A记录的值。暂时替换成旧版的cloudflare.py, 无问题
目前如果将index4 设置为数字获取到的是内网地址,如果改为public就只会获取其中一个IP地址,并不会拿到某个网卡的外网地址。
我这边刚刚手机发现又无连上PC的FTP了 查了下阿里云的控制台 发现解析IP一直没更新过 (之前昨天已经双击运行了) 我重试了双击运行 和管理员运行 均无效 均等待5-10分钟 没有更新 最后手动运行exe更新的...
dnspod 更新时报这个 SSL CERTIFICATE_VERIFY_FAILED,网上的解决方案是
export PYTHONHTTPSVERIFY=0
我的机器是华芸的NAS,下载的是Linux的二进制文件,执行的适合报错了
ERROR:root:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)
windows 下有个函数
使用这个函数可以监听到ip的变化(Windows Vista 及 Windows Server 2008 之后的版本),我看作者实现监听ip变化的原理是5分钟循环检测。可不可以在5分钟循环的基础上再加上使用这个API。这样的话会更加及时的检测到ip的变化。
更新成功,谢谢!
部分路由器不支持 ipv6 ddns
k2p官改版可以用吗?怎么用?
求安装,设置办法
运行没有报错,日志里有update ipv4 to: XXX.XXX.XXX
还有很多行只输出了一个点
但是去查询发现并没有修改成功
按照格式配置后 管理员运行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打开就是这个格式
使用子域名总提示不存在 谢谢
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'}
运行版本: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的调用导致脚本运行失败
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更新已存在的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}
昨天dnspod故障影响严重,计划使用cloudxns,希望能够支持这家的API
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.