安装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 请求以检查其响应状态。
以下是代码的详细解释:
-
导入模块:
pythonimport json import requests from aliyunsdkcore.client import AcsClient from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
json
:用于解析和生成 JSON 数据。requests
:用于发送 HTTP 请求。AcsClient
和DescribeDomainRecordsRequest
:阿里云 SDK 中用于与阿里云 DNS 服务交互的类。
-
设置阿里云凭证:
pythonaccess_key_id = '' access_key_secret = ''
- 这里需要填入你的阿里云 AccessKey ID 和 AccessKey Secret,以便进行身份验证。
-
创建阿里云客户端实例:
pythonclient = AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
- 创建一个
AcsClient
实例,并指定区域 ID 为'cn-hangzhou'
。
- 创建一个
-
定义
text_request
函数:pythondef 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 或请求出现异常,则打印错误信息。
-
定义
list_domain_records
函数:pythondef 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 请求。
- 该函数首先创建一个
-
调用
list_domain_records
函数:pythondomain_name = 'iiar.cn' list_domain_records(domain_name)
- 设置要查询的域名为
'iiar.cn'
,然后调用list_domain_records
函数。
- 设置要查询的域名为
总结
这段代码用于从阿里云 DNS 服务中获取指定域名的所有 A 记录,并对每个 A 记录进行 HTTP GET 请求以验证其有效性。它首先通过阿里云 SDK 获取域名的 DNS 记录,然后对每条记录进行检查,以确定其是否有效。