通过python脚本查询自己阿里云账号里的某个域名的A记录解析情况,以及测拨,用于排查未使用的解析

news2024/11/17 13:40:07

安装sdk

pip install aliyun-python-sdk-alidns

代码全文

import json
import requests
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest

# 替换为你的阿里云 AccessKey ID 和 AccessKey Secret
access_key_id = ''
access_key_secret = ''

client = AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')  # 设置区域 ID


def text_request(url, Value):
    try:
        test_res = requests.get(url)
        if test_res.status_code == 200:
            a = url
        else:
            print(f"{url} 响应异常 {Value}")
    except Exception as e:
        a = e
        print(f"{url} 响应异常 {Value}")


def list_domain_records(domain_name):
    request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
    request.set_DomainName(domain_name)
    request.set_PageSize(100)  # 每页记录数,最多100
    response = client.do_action_with_exception(request)
    res = response.decode('utf-8')
    json_res = json.loads(res)
    total_count = len(json_res['DomainRecords']['Record'])
    for i in json_res['DomainRecords']['Record']:
        if i['Type'] == 'A' and i['RR'] != '*':
            url = f"http://{i['RR']}.{domain_name}"
            text_request(url, i['Value'])
            total_count -= 1


# 替换为你要查询的域名
domain_name = 'iiar.cn'
list_domain_records(domain_name)

运行效果

在这里插入图片描述

代码详解

chatgpt协助整理

代码含义

这段代码的功能是使用阿里云的 SDK 从阿里云 DNS 服务中获取域名的所有 A 记录,并对每个 A 记录执行一次 HTTP GET 请求以检查其响应状态。

以下是代码的详细解释:

  1. 导入模块

    import json
    import requests
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
    
    • json:用于解析和生成 JSON 数据。
    • requests:用于发送 HTTP 请求。
    • AcsClientDescribeDomainRecordsRequest:阿里云 SDK 中用于与阿里云 DNS 服务交互的类。
  2. 设置阿里云凭证

    access_key_id = ''
    access_key_secret = ''
    
    • 这里需要填入你的阿里云 AccessKey ID 和 AccessKey Secret,以便进行身份验证。
  3. 创建阿里云客户端实例

    client = AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
    
    • 创建一个 AcsClient 实例,并指定区域 ID 为 'cn-hangzhou'
  4. 定义 text_request 函数

    def text_request(url, Value):
        try:
            test_res = requests.get(url)
            if test_res.status_code == 200:
                a = url
            else:
                print(f"{url} 响应异常 {Value}")
        except Exception as e:
            a = e
            print(f"{url} 响应异常 {Value}")
    
    • 该函数发送一个 GET 请求到指定的 URL,并检查响应状态码。如果状态码为 200(即成功),则不做任何处理;如果状态码不是 200 或请求出现异常,则打印错误信息。
  5. 定义 list_domain_records 函数

    def list_domain_records(domain_name):
        request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
        request.set_DomainName(domain_name)
        request.set_PageSize(100)
        response = client.do_action_with_exception(request)
        res = response.decode('utf-8')
        json_res = json.loads(res)
        total_count = len(json_res['DomainRecords']['Record'])
        for i in json_res['DomainRecords']['Record']:
            if i['Type'] == 'A' and i['RR'] != '*':
                url = f"http://{i['RR']}.{domain_name}"
                text_request(url, i['Value'])
                total_count -= 1
    
    • 该函数首先创建一个 DescribeDomainRecordsRequest 请求对象,并设置要查询的域名和每页记录数(最多 100 条)。
    • 发送请求并解析响应 JSON 数据。
    • 遍历所有记录,检查记录类型是否为 A 且记录值(RR)不是 *,构造 URL 并调用 text_request 函数进行 HTTP 请求。
  6. 调用 list_domain_records 函数

    domain_name = 'iiar.cn'
    list_domain_records(domain_name)
    
    • 设置要查询的域名为 'iiar.cn',然后调用 list_domain_records 函数。

总结

这段代码用于从阿里云 DNS 服务中获取指定域名的所有 A 记录,并对每个 A 记录进行 HTTP GET 请求以验证其有效性。它首先通过阿里云 SDK 获取域名的 DNS 记录,然后对每条记录进行检查,以确定其是否有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

栈与队列 - 逆波兰表达式求值

150. 逆波兰表达式求值 方法一:栈 /*** param {string[]} tokens* return {number}*/ var evalRPN function(tokens) {const stack [];for (const token of tokens) {if (isNaN(Number(token))) { // 非数字const n2 stack.pop(); // 出栈两个数字const n1 s…

假期作业--数据结构

1、顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生…

javaEE中自定义注解以及注解的解析

注解: 就是java代码里的特殊标记,比如Override、Test,作用是:让其它程序根据注解信息来决定怎么执行程序。 自定义注解:自己定义注解 Public interface 注解名称{ Public 属性类型 属性名() default 默认…

写字楼/办公室为什么要建设智慧公厕?有哪些价值?@卓振思众

智慧公厕是指利用先进技术和设备对公共厕所进行智能化管理的系统。这些技术包括物联网(IoT)、传感器技术、大数据分析和自动化系统等。【卓振思众】智慧公厕不仅提升了公厕的使用体验,还实现了更高效的管理和维护。 写字楼/办公室智慧公厕的定…

揭秘RAG与大模型对接:深入探讨9大隐藏挑战

前一段时间,各个大模型在争斗:谁能携带更长、更大的上下文 Prompt,比如 Kimi 说 200 万字,阿里通义千问又说自己能达 1000 万字;大家都知道 Prompt 很重要,但是 RAG 和 长的上下文文本携带 是两个不同的技术…

mac查看jdk安装目录

打开终端,直接输入命令: /usr/libexec/java_home终端即会输出jdk的安装目录:

8.17日学习打卡---Spring Cloud Alibaba(四)

8.17日学习打卡 目录: 8.17日学习打卡分布式流量防护什么是服务雪崩解决方案内部异常治理外部流量控制 SentinelSentinel 基本概念Sentinel 的主要特性Sentinel 是如何工作的Sentinel 与 Hystrix、resilience4j 的对比安装Sentinel控制台将应用接入Sentinel流量控制…

python使用flask实现自动根据url寻找对应目录/文件/方法,实现动态路由

例如访问:/user/index/index_config 则自动访问/user 目录里 index.py文件里的 index_config 方法 实现代码 from flask import Flask,jsonifyapp Flask(__name__)def reg_func(code, data, msg, debugNone, showFalse):return jsonify({code: code,data: data,msg: msg,time…

iPhone照片怎么导入电脑?一键导入毫不费力

随着智能手机的普及,我们越来越依赖手机来记录生活的点点滴滴。iPhone作为其中的佼佼者,其高质量的摄像头为用户捕捉了无数珍贵瞬间。然而,随着照片数量的增多,手机存储空间可能会变得捉襟见肘,此时将照片导入电脑既能…

UniAD_面向规划的自动驾驶

Planning-oriented Autonomous Driving 面向规划的自动驾驶 https://github.com/OpenDriveLab/UniAD Abstract Modern autonomous driving system is characterized as modular tasks in sequential order, i.e., perception, prediction, and planning. In order to perfor…

Python 如何创建和管理虚拟环境?

Python虚拟环境是一个独立的运行环境,能够与系统的全局Python环境相隔离。它允许你在不影响系统其他项目的前提下,为每个项目创建独立的Python环境,并在该环境中安装特定版本的包和依赖项。这在开发多个项目时非常有用,尤其是当这…

EmguCV学习笔记 VB.Net 4.1 颜色变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…

使用Python实现B站自动答题机器人

文章目录 1. 写在前面2. 接口分析3. 点选验证分析4. Python程序实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

解密Linux中的通用块层:加速存储系统,提升系统性能

通用块层 通用块层是Linux中的一个重要组件,用于管理不同块设备的统一接口,减少不同块设备的差异带来的影响。它位于文件系统和磁盘驱动之间,类似于Java中的适配器模式,让我们无需关注底层实现,只需提供固定接口即可。…

【13】即时编译(JIT)

概念 即时编译是用来提升应用运行效率的技术。代码会先在JVM上解释执行,之后反复执行的热点代码会被即时翻译成为机器码,直接运行在底层硬件上。 分层编译模式 HotSpot包含多个即时编译器:C1、C2和Graal(Java 10,实验…

Native开发与逆向第一篇-字符串

开发 Android studio新建项目 Android studio新建一个Native C项目。 默认代码就是调用Native 方法stringFromJNI 返回一个字符串。 public native String stringFromJNI();C 代码 stringFromJNI 函数的代码,默认使用的是静态注册的方式,静态注册是函…

【数据结构】链式结构实现:二叉树

二叉树 一.快速创建一颗二叉树二.二叉树的遍历1.前序、中序、后序遍历(深度优先遍历DFS)2.层序遍历(广度优先遍历BFS) 三.二叉树节点的个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第k层节点个数七.二叉树查找值为x的节点…

C++ //练习 17.23 编写查找邮政编码的正则表达式。一个美国邮政编码可以由五位或九位数字组成。前五位数字和后四位数字之间可以用一个短横线分隔。

C Primer(第5版) 练习 17.23 练习 17.23 编写查找邮政编码的正则表达式。一个美国邮政编码可以由五位或九位数字组成。前五位数字和后四位数字之间可以用一个短横线分隔。 环境:Linux Ubuntu(云服务器) 工具&#x…

【CTF | WEB】004、攻防世界WEB题目之simple_js

文章目录 simple_js题目描述:题目场景:解题思路 simple_js 题目描述: 小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 题目场景: 解题思路 尝试了一下随便输入密码,显示如下: 按下F1…

【高阶数据结构】图

图 1. 图的基本概念2. 图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 3. 图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4. 最小生成树4.1 Kruskal算法4.2 Prim算法 5. 最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算…