阿里云 DNS 调用脚本

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

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

    535 引用 • 672 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • V2Ray
    1 引用 • 15 回帖
  • PHP

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

    164 引用 • 407 回帖 • 526 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 394 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 38 关注
  • sts
    2 引用 • 2 回帖 • 146 关注
  • jsoup

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

    6 引用 • 1 回帖 • 457 关注
  • Rust

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

    57 引用 • 22 回帖 • 2 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 628 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 150 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    368 引用 • 1212 回帖 • 577 关注
  • Electron

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

    15 引用 • 136 回帖 • 9 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 512 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖 • 1 关注
  • HTML

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

    103 引用 • 294 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 199 关注
  • Gitea

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

    4 引用 • 16 回帖 • 1 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖 • 2 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    139 引用 • 441 回帖
  • Q&A

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

    6521 引用 • 29303 回帖 • 248 关注
  • danl
    61 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 7 关注
  • 大疆创新

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

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

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 126 关注