阿里云 DNS 调用脚本

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

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

    536 引用 • 672 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 251 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 25 关注
  • 前端

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

    247 引用 • 1347 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • 友情链接

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

    24 引用 • 373 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 429 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 27 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 687 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6558 引用 • 29450 回帖 • 246 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 228 关注
  • Laravel

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

    19 引用 • 23 回帖 • 686 关注
  • SQLServer

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

    19 引用 • 31 回帖 • 6 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 25 关注
  • Gitea

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

    4 引用 • 16 回帖 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    20 引用 • 74 回帖 • 2 关注
  • Sublime

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

    10 引用 • 5 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 24 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • 域名

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

    43 引用 • 208 回帖 • 2 关注