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

安装sdk

bash 复制代码
pip install aliyun-python-sdk-alidns

代码全文

python 复制代码
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. 导入模块

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

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

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

    python 复制代码
    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 函数

    python 复制代码
    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 函数

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

总结

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

相关推荐
hui函数2 小时前
Flask电影投票系统全解析
后端·python·flask
好学且牛逼的马3 小时前
GOLANG 接口
开发语言·golang
ahauedu3 小时前
AI资深 Java 研发专家系统解析Java 中常见的 Queue实现类
java·开发语言·中间件
韭菜钟3 小时前
在Qt中用cmake实现类似pri文件的功能
开发语言·qt·系统架构
闲人编程3 小时前
Python第三方库IPFS-API使用详解:构建去中心化应用的完整指南
开发语言·python·去中心化·内存·寻址·存储·ipfs
计算机编程小咖4 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
CTRA王大大4 小时前
【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
linux·开发语言·docker·golang
zhangfeng11335 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
flashlight_hi6 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
python·算法·leetcode
Ashlee_code6 小时前
香港券商櫃台系統跨境金融研究
java·python·科技·金融·架构·系统架构·区块链