阿里云 DNS 调用脚本

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

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

    556 引用 • 675 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    28 引用 • 197 回帖 • 30 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • WordPress

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

    66 引用 • 114 回帖 • 190 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 486 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 546 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 740 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 652 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 115 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 179 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 166 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 1 关注
  • Access
    1 引用 • 3 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 447 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    368 引用 • 1846 回帖 • 2 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 2 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 3 关注
  • 域名

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

    43 引用 • 208 回帖 • 1 关注
  • Rust

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

    58 引用 • 22 回帖 • 6 关注
  • 印象笔记
    3 引用 • 16 回帖 • 4 关注