阿里云 DNS 调用脚本

本贴最后更新于 2611 天前,其中的信息可能已经物是人非

主程序 几个函数调用阿里云接口 flask 前端交互 加入 http 认证 很 low 的代码 只作为测试使用

#!/usr/bin/env python #encoding: utf-8 [aliyundnszip](https://b3logfile.com/pipe/up/up/up/1652e09ecb824a1b8ea000a3202393c5.zip) from flask import Flask, render_template, request, flash from flask_httpauth import HTTPBasicAuth from aliyunsdkalidns.request.v20150109 import AddDomainRequest, AddDomainRecordRequest, DescribeDomainRecordsRequest,DescribeRecordLogsRequest from aliyunsdkcore import client import redis import json # import urllib, urllib2 app = Flask(__name__) app.secret_key = 'kjsensldfneapk' auth = HTTPBasicAuth() #http users = [ {'username': 'admin', 'password': 'admin'}, ] r = redis.StrictRedis(host='172.16.10.133', port=31350, db=0) # a={'Action': 'ADD', 'ActionTimestamp': 1515035872000L, 'Message': '\xe6\x96\xb0\xe5\xa2\x9e\xe8\xa7\xa3\xe6\x9e\x90\xe8\xae\xb0\xe5\xbd\x95 A\xe8\xae\xb0\xe5\xbd\x95 blog \xe9\xbb\x98\xe8\xae\xa4 61.128.128.68 ( TTL: 600) ', 'ActionTime': '2018-01-04T11:17Z', 'ClientIp': '14.105.38.140'}, {'Action': 'DEL', 'ActionTimestamp': 1514960338000L, 'Message': '\xe5\x88\xa0\xe9\x99\xa4\xe8\xa7\xa3\xe6\x9e\x90\xe8\xae\xb0\xe5\xbd\x95 A\xe8\xae\xb0\xe5\xbd\x95 pay \xe9\xbb\x98\xe8\xae\xa4 172.16.10.25 ( TTL: 600)', 'ActionTime': '2018-01-03T14:18Z', 'ClientIp': '14.105.38.140'} # b=str(a) # print b # r.set('A',b) # r.set('A','{'Action': 'ADD', 'ActionTimestamp': 1515035872000L, 'Message': '\xe6\x96\xb0\xe5\xa2\x9e\xe8\xa7\xa3\xe6\x9e\x90\xe8\xae\xb0\xe5\xbd\x95 A\xe8\xae\xb0\xe5\xbd\x95 blog \xe9\xbb\x98\xe8\xae\xa4 61.128.128.68 ( TTL: 600) ', 'ActionTime': '2018-01-04T11:17Z', 'ClientIp': '14.105.38.140'}, {'Action': 'DEL', 'ActionTimestamp': 1514960338000L, 'Message': '\xe5\x88\xa0\xe9\x99\xa4\xe8\xa7\xa3\xe6\x9e\x90\xe8\xae\xb0\xe5\xbd\x95 A\xe8\xae\xb0\xe5\xbd\x95 pay \xe9\xbb\x98\xe8\xae\xa4 172.16.10.25 ( TTL: 600)', 'ActionTime': '2018-01-03T14:18Z', 'ClientIp': '14.105.38.140'}') # print r.get('db') #阿里云相关认证 # access_key_id = "xxxx" access_key_id = "xxxx" # access_Key_secret = "xx" access_Key_secret = "xxxxx" # Version = "2015-01-09" # #主域名 # rc_domain = "youngblog.cc" # #请填写你的解析记录 # rc_rr = 'pay' # #需要添加的记录 # rc_add = 'blog' # #客服端ip # rc_ip= "61.128.128.68" # #请填写返还内容格式,json,xml rc_format = 'json' #检查域名是否存在 # def check_records(dns_domain): # # clt = client.AcsClient(access_key_id, access_Key_secret, 'cn-hangzhou') # clt = client.AcsClient(access_key_id, access_Key_secret) # request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() # request.set_DomainName(dns_domain) # request.set_accept_format(rc_format) # result = clt.do_action_with_exception(request) # return result def add_dns(dns_domain,dns_add,dns_value,dns_type,dns_format): #阿里云dns 调用请参考 https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-alidns/aliyunsdkalidns/request/v20150109 clt = client.AcsClient(access_key_id, access_Key_secret) # request = AddDomainRequest.AddDomainRequest()#方法调用错误 request = AddDomainRecordRequest.AddDomainRecordRequest() request.set_DomainName(dns_domain) request.set_RR(dns_add) request.set_Value(dns_value) request.set_Type(dns_type) request.set_accept_format(dns_format) result = clt.do_action_with_exception(request) # print result return result ###获取操作记录 def get_domain(dns_domain,dns_format): clt = client.AcsClient(access_key_id, access_Key_secret) request = DescribeRecordLogsRequest.DescribeRecordLogsRequest() request.set_DomainName(dns_domain) request.set_accept_format(dns_format) result = clt.do_action_with_exception(request) #eval 转换json不能识别中文,这里使用json.loads进行转换 return json.loads(result)['RecordLogs']['RecordLog'][0:10] #转换后中文乱码 等待从redis中读取后再处理 # return eval(result)['RecordLogs']['RecordLog'][0:10] # print get_domain(rc_domain,rc_format) def getinfoRdis(): for k,v in enumerate(get_domain(rc_domain,rc_format)): str_v=str(v) r.set(k,str_v) return eval(r.get(0))['Message'] ##http 认证 @auth.get_password def get_password(username): for user in users: if user['username'] == username: return user['password'] return None # print check_records(rc_domain) # print add_dns(rc_domain,rc_add,rc_ip,"A",rc_format) # def post_url(url, data): # req = urllib2.Request(url) # data = urllib.urlencode(data) # opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) # resp = opener.open(req, data) # return resp.read() # # flask 应用部分 @app.route('/', methods=["GET", "POST"]) @auth.login_required def index(): if request.method == 'POST': domain = request.form['domain'] adddomain = request.form['adddomain'] ip_value = request.form['ip_value'] dnstype = request.form['dnstype'] if adddomain == "cahsier" or adddomain == "image" or adddomain == "pay" or adddomain == "merch" or adddomain == "www" or adddomain == "": flash(u'过滤敏感信息') return render_template('index.html') c = add_dns(domain,adddomain,ip_value,dnstype,'json') print c flash(u'更新域名完成请稍后查看') print "相关地址:domain,adddomain,ip_value,dnstype",domain,adddomain,ip_value,dnstype if request.method == 'GET': # flash(get_domain(rc_domain,rc_format)) flash(getinfoRdis()) # print add_dns(rc_domain,rc_add,rc_ip,"A",rc_format) return render_template('index.html') # elif request.method == 'GET': if __name__ == '__main__': app.run(host='0.0.0.0', port=8081)

前端代码:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>添加域名解析</title> <!-- Tell the browser to be responsive to screen width --> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <!-- Bootstrap 3.3.6 --> <link rel="stylesheet" href="/static/css/bootstrap.min.css"> <!-- Font Awesome --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"> <!-- Ionicons --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css"> <!-- Theme style --> <link rel="stylesheet" href="/static/css/AdminLTE.min.css"> <!-- iCheck --> <link rel="stylesheet" href="/static/css/blue.css"> </head> <body class="hold-transition login-page"> <div class="login-box"> <div class="login-logo"> <a >添加域名解析</a> </div> <!-- /.login-logo --> <div class="login-box-body"> <form action="/" method="post"> <div class="form-group has-feedback"> <input type="text" name="domain" class="form-control" placeholder="域名" value="域名" readonly> {# <input type="text" name="domain" class="form-control" placeholder="youngblog.cc" value="youngblog.cc" readonly>#} <span class="glyphicon glyphicon-envelope form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="text" name="adddomain" class="form-control" placeholder="主机记录/如blog"> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="text" name="ip_value" class="form-control" value="61.128.158.218"> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="text" name="dnstype" class="form-control" placeholder="A" value="A" readonly> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> pay,merch,www.等域名不能解析,请填写正确的IP地址,存在相同记录会报错 <div class="row"> <div class="col-xs-8"> </div> <!-- /.col --> <div class="col-xs-4"> <button type="submit" class="btn btn-primary btn-block btn-flat">确定</button> </div> <!-- /.col --> </div> </form> <div class="social-auth-links text-center"> </div> <!-- /.social-auth-links --> </div> <!-- /.login-box-body --> {% block custom_message %} {% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} <div class="select-bar"> <ul style="margin:0 0 0 10px;padding:5px 10px;"> {% for category, message in messages %} <li style="font-size:15px;">{{ message | safe }}</li> {% endfor %} </ul> </div> {% endif %} {% endwith %} {% endblock %} </div>

目录结构 css fonts 这些就直接在网上下载就行

├── run.py ├── static │   ├── css │   │   ├── AdminLTE.css │   │   ├── AdminLTE.min.css │   │   ├── blue.css │   │   ├── bootstrap.css │   │   ├── bootstrap.css.map │   │   ├── bootstrap.min.css │   │   ├── bootstrap.min.css.map │   │   ├── bootstrap-theme.css │   │   ├── bootstrap-theme.css.map │   │   ├── bootstrap-theme.min.css │   │   ├── bootstrap-theme.min.css.map │   │   ├── dataTables.bootstrap.css │   │   ├── font-awesome.min.css │   │   └── ionicons.min.css │   └── fonts │       ├── glyphicons-halflings-regular.eot │       ├── glyphicons-halflings-regular.svg │       ├── glyphicons-halflings-regular.ttf │       ├── glyphicons-halflings-regular.woff │       └── glyphicons-halflings-regular.woff2 ├── templates │   └── index.html
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 工具

    子曰:“工欲善其事,必先利其器。”

    300 引用 • 768 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 37 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 61 关注
  • OpenCV
    15 引用 • 36 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 226 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 166 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 38 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 4 关注
  • Outlook
    1 引用 • 5 回帖 • 1 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 496 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 442 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 4 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖 • 2 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • OneNote
    1 引用 • 3 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 5 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    44 引用 • 208 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖 • 4 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 2 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    59 引用 • 22 回帖 • 8 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖