CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 16877|回复: 14

里程碑!家里的开发板能使用Dnspod的动态域名服务,稳定

[复制链接]
发表于 2013-3-21 10:43:06 | 显示全部楼层 |阅读模式
本帖最后由 play4fun 于 2013-6-3 14:50 编辑

最近,家里路由器的外网IP不稳定,总是不能访问。铁通的服务很差劲。
因此,http://dev.yangchun.so 暂停访问。

在新浪微博联系我@JAVA搜索
http://weibo.com/richlinux
网站:http://www.yangchun.so


一直想着要把家里的Cubieboard开发板搭一个网站,在外面可以稳定访问。
之前试了花生壳动态域名,非常不稳定。在外面无法访问。

直到昨天看到一篇文章。
linux下的动态域名解析 http://www.leadnt.com/2012/08/domains-dns-localdomains-linux/
如果服务器支持python,终端执行:
cd /home/
wget http://www.leadnt.com/tools/local_domains/local_domains_Python.zip
unzip local_domains_Python.zip
vi local_domains_Python.py

修改如下:
        #Dnspod账户
        _dnspod_user = 'test@example.com'
        #Dnspod密码
        _dnspod_pwd = 'xxx'
        #Dnspod主域名,注意:是你注册的域名
        _domain = 'yangchun.so'
        #子域名,如www,如果要使用根域名,用@
        _sub_domain = 'dev'

然后利用contab加入到计划任务里:
crontab -e
在定时任务里加入:
*  1  *  *  *  python /home/local_domains_Python.py
这个是设置为1小时运行一次。

或者直接运行:

root@localhost:/home# ./local_domains_Python.py
Success.

然后,我的子域名:http://dev.yangchun.so 就可以稳定访问了。
欢迎大家访问,留个言什么滴~

这个东西,跟 Cannikin 写的文章是一样的,他使用了3322.net的动态域名服务。
动态域名下的Cubieboard服务器http://itxp.3322.org/index.php/archives/33/

但实现过程不一样。我这个使用python,是哪位作者自己写的代码,使用DNSPon服务。
Cannikin使用了lynx ,这是个文本浏览器。
lynx -mime_header -auth=申请的用户名:密码 http://members.3322.net/dyndns/update?system=dyndns&hostname=申请的免费动态域名
其实就是一行命令。
建议大家使用DNSpod,毕竟是自己的域名,可以自由使用。

其实我的开发板,今天是用电小二开着,看电小二的5000毫安电量能撑多久。

local_domains_Python.py源代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import urllib2,urllib,json

class Dns:
        #Dnspod账户
        _dnspod_user = 'test@example.com'
        #Dnspod密码
        _dnspod_pwd = 'xxx'
        #Dnspod主域名,注意:是你注册的域名
        _domain = 'yangchun.so'
        #子域名,如www,如果要使用根域名,用@
        _sub_domain = 'app'
        
        def getMyIp(self):
                try:
                        u = urllib2.urlopen('http://www.leadnt.com/tools/ip.php')
                        return u.read()
                except HTTPError as e:
                        print e.read()
                        return None;
        
        
               
        def api_call(self,api,data):
                try:
                        api = 'https://dnsapi.cn/' + api
                        data['login_email'] = self._dnspod_user
                        data['login_password'] = self._dnspod_pwd
                        data['format'] ='json'
                        data['lang'] =  'cn'
                        data['error_on_empty'] = 'no'
                        
                        data = urllib.urlencode(data)
                        req = urllib2.Request(api,data,
                                headers = {
                                        'UserAgent' : 'LocalDomains/1.0.0(roy@leadnt.com)',
                                        'Content-Type':'application/x-www-form-urlencoded;text/html; charset=utf8',
                                        })
                        res = urllib2.urlopen(req)
                        html = res.read()
                        results = json.loads(html)
                        return results
                except Exception as e:
                        print e
                        
        
        def main(self):
                ip = self.getMyIp()
                dinfo = self.api_call('domain.info',{'domain' : self._domain})
                domainId = dinfo['domain']['id']
                rs = self.api_call('record.list',
                        {
                                'domain_id': domainId,
                                'offset' :'0',
                                'length' : '1',
                                'sub_domain' : self._sub_domain
                        })
                        
                if rs['info']['record_total'] == 0:
                        self.api_call('record.create',
                                {
                                        'domain_id' : domainId,
                                        'sub_domain' : self._sub_domain,
                                        'record_type' : 'A',
                                        'record_line' : '默认',
                                        'value' : ip,
                                        'ttl' : '3600'
                                })
                        print 'Success.'
                else:
                        if rs['records'][0]['value'].strip() != ip.strip():
                                self.api_call('record.modify',
                                {
                                        'domain_id' : domainId,
                                        'record_id' : rs['records'][0]['id'],
                                        'sub_domain' : self._sub_domain,
                                        'record_type' : 'A',
                                        'record_line' : '默认',
                                        'value' : ip
                                        })
                        else:
                                print 'Success.'
               
if __name__ == '__main__':
        d = Dns();
        d.main()


截图:
QQ截图20130321103835.jpg
回复

使用道具 举报

发表于 2013-3-21 10:43:54 | 显示全部楼层
占楼支持,新鲜出炉的。
回复 支持 反对

使用道具 举报

发表于 2013-3-21 11:33:02 | 显示全部楼层
本帖最后由 WindLand 于 2013-3-21 11:41 编辑

呵呵。dnspod我已经用了有一段时间了。

我用家里4400ma的移动电源我试过,晚上12点开机,带个无线网卡,就开了nginx和php-fpm ,早晨起床发现已经没电了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 19:21:22 | 显示全部楼层
WindLand 发表于 2013-3-21 11:33
呵呵。dnspod我已经用了有一段时间了。

我用家里4400ma的移动电源我试过,晚上12点开机,带个无线网卡, ...

现在5000ma的电源,应该没电了。不能登录网站。哈哈
回复 支持 反对

使用道具 举报

发表于 2013-3-21 20:17:02 | 显示全部楼层
我的cubieboard工作照

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 22:00:34 | 显示全部楼层
chopin1998 发表于 2013-3-21 20:17
我的cubieboard工作照

美元?还是什么币?
回复 支持 反对

使用道具 举报

发表于 2013-3-22 10:53:43 | 显示全部楼层
play4fun 发表于 2013-3-21 22:00
美元?还是什么币?

美刀美刀美刀美刀美刀美刀
回复 支持 反对

使用道具 举报

发表于 2013-5-8 23:45:13 | 显示全部楼层
100美元 很大的票子了
回复 支持 反对

使用道具 举报

发表于 2013-5-29 22:20:51 | 显示全部楼层
*  1  *  *  *  python /home/local_domains_Python.py
这个是设置为1小时运行一次。
这里是不是有问题
*  */1  *  *  *  python /home/local_domains_Python.py
这样?谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-31 20:52:39 | 显示全部楼层
woyoo 发表于 2013-5-29 22:20
*  1  *  *  *  python /home/local_domains_Python.py
这个是设置为1小时运行一次。
这里是不是有问题

添加的命令必须以如下格式:
   * * * * * /command path
      
       前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。

前5个字段分别表示:
       分钟:0-59
       小时:1-23
       日期:1-31
       月份:1-12
       星期:0-6(0表示周日)

http://blog.csdn.net/tianlesoftware/article/details/5315039
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-5-9 23:55 , Processed in 0.029322 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部