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

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

时间:2024-08-19 13:22:13浏览次数:14  
标签:domain name python res 测拨 request url json 解析

安装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 记录,然后对每条记录进行检查,以确定其是否有效。

标签:domain,name,python,res,测拨,request,url,json,解析
From: https://blog.csdn.net/weixin_40541330/article/details/141322091

相关文章

  • 2024年高教社杯数学建模国赛B题思路解析+代码+论文
    2024年高教社杯全国大学生数学建模竞赛(以下简称国赛)将于9月5日晚6时正式开始。下文包含:2024国赛思路解析​、国赛参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料,帮......
  • python入门教程(非常详细!3w+ 文字)
    先序:学习编程语言要先学个轮廓,刚开始只用学核心的部分,一些细节、不常用的内容先放着,现用现查即可;把常用的东西弄熟练了在慢慢补充。1、安装Python解释器为什么需要安装PythonPython语言本身是由解释器执行的,因此你需要在你的计算机上安装Python解释器。这个解释......
  • Unity 麦扣 x 勇士传说 全解析 之 有限状态机(附各模块知识的链接,零基础也包学会的牢弟
            在编码前我一直有个疑问,为什么不是将方法写在一个一个类中,或者用的单例模式写个管理器来继承的方式来做怪物脚本,玩家控制和玩家动画控制的代码混在一起不说,与其他脚本之间的交互,让过于冗杂的代码不易阅读        这节开始应用的有限状态机,似乎一定......
  • Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(
    1.怪物的动画逻辑一览2.怪物的受伤死亡逻辑一览usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Xml;usingUnityEngine;publicclassMonster:MonoBehaviour{[Header("速度")]publicfloatnormalSpeed;publicfloatchas......
  • k8s实践——命名空间隔离+request-key机制解决CSI内核态域名解析
    0x01背景Pod需要使用远程存储的PV,由同k8s集群内的服务提供的存储服务。一开始的做法是:CSI中解析Service的clusterIP。然后使用clusterIP挂载PV卷。但因为走clusterIP时,经过多次转换:clusterIP到PodIP经过了1次NATPodIP到最终服务。经过1次转发,具体性能损耗跟CNI实现......
  • 大模型入门必读:全面解析大型模型实用技术与应用
    Gemma模型架构和参数计算近期,大模型相关的技术和应用层出不穷,各个方向的论文百花齐放,底层的核心技术是大家公认的精华部分。本文从技术的角度聚焦大模型的实战经验,总结大模型从业者关注的具体方向以及相关发展,帮助打算参与到大模型工作的人高效上手相关工作。基座模型参数......
  • linux 安装python
    1、先查看系统python所在位置[root@localhost~]#whereispythonpython:/usr/bin/python/usr/bin/python2.7/usr/lib/python2.7/usr/lib64/python2.7/etc/python/usr/include/python2.7可确认系统原python环境在/usr/bin/下。2、进入/usr/bin/cd/usr/bin/3、先安......
  • CANoe_UDS-boorloader 自动化测试系列(二)基本功能:CAPL实现UDS协议下的CAN报文接收#解析
    目录一、前言二、CAPL实现1、报文接收接收报文函数:2、报文发送发送报文函数:三、总结展望一、前言halle,大家好,我是小鸟鹏。上篇文章《CANoe_UDS-boorloader自动测试系列(二)基本刷写流程》简单介绍了整Bootloader的基本刷写流程,包括具体使用哪些服务实现哪些功能,对......
  • python subprocess 执行Linux指令
    一、subprocess模块1、概述subprocess模块首先推荐使用的是它的run方法subprocess.run(),更高级的用法可以直接使用Popen接口subprocess.Popen()。2、优点安全性:与os.system相比,subprocess避免了shell注入攻击的风险。灵活性:subprocess可以与子进程的stdin、stdout和std......
  • 0245-CLAP-解析位置参数
    环境Time2022-12-02WSL-Ubuntu22.04CLAP4.0.29前言说明参考:https://docs.rs/clap/latest/clap/index.html目标CLAP表示CommandLineArgumentParser。基于clap编写第一个命令行程序。Cargo.toml[package]edition="2021"name="game"version="1.0.......