使用Python获取DNS记录

#   A记录也称为主机记录,是使用最广泛的DNS记录,A记录的基本作用就是说明一个域名对应的IP是多少, 它是域名和IP地址的对应关系,表现形式为 www.contoso.com 192.168.1.1 这就是一个A记录!A记录除了进行域名IP对应以外,还有一个高级用法,可以作为低成本的负载均衡的解决方案,比如说,www.contoso.com 可以创建多个A记录,对应多台物理服务器的IP地址,可以实现基本的流量均衡!)
#   MX记录,全称是邮件交换记录,在使用邮件服务器的时候,MX记录是无可或缺的,比如A用户向B用户发送一封邮件,那么他需要向DNS查询B的MX记录,DNS在定位到了B的MX记录后反馈给A用户,然后A用户把邮件投递到B用户的MX记录服务器里!
import dns.resolver     #导入DNS处理模块

dns_record = {}     #字典存储
website = input("input website:")   #获取输入

a_record = dns.resolver.resolve(website,'A')    # 获取网站的“A”记录并将其存储在字典中
for ip in a_record:
     dns_record['A_record_IP'] = ip.to_text()

mx_record_list = []     #列表存储 mx 记录
mx_record = dns.resolver.resolve(website,"MX")       # 获取网站的“MX”记录并将其存储在列表中
for server in mx_record:
    mx_record_list.append(server)
for i,element in enumerate(mx_record_list):
    dns_record["MX_record",i+1] = element

for key,value in dns_record.items():
    print(f"{key} = {value}")

参考:https://github.com/Python-World/python-mini-projects

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python3 中使用 ACME 协议实现 DNS 验证的步骤如下: 1. 安装 `acme` 和 `requests` 模块: ```bash pip install acme requests ``` 2. 导入相关模块: ```python import os import json import requests from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from acme import client from acme import messages from acme.client import ClientV2 from acme.errors import AcmeError from acme.jose import jwk from acme.jose import jose_base64url_decode ``` 3. 设置 ACME 服务器的 URL 和 API 密钥: ```python ACME_SERVER = 'https://acme-v02.api.letsencrypt.org/directory' API_KEY = '<your_api_key>' ``` 4. 生成 ACME 账户的 RSA 密钥: ```python private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend(), ) ``` 5. 创建 ACME 客户端实例: ```python directory_url = ACME_SERVER client = ClientV2(directory_url, key=private_key) ``` 6. 注册 ACME 账户: ```python email = '<your_email_address>' registration = client.new_account( messages.NewRegistration.from_data(email=email), accept_terms_of_service=True, ) ``` 7. 创建需要验证的域名列表: ```python domain_list = ['example.com', 'www.example.com'] ``` 8. 对每个域名创建 ACME 订单: ```python order_list = [] for domain in domain_list: identifier = messages.Identifier( typ=messages.IDENTIFIER_FQDN, value=domain) order = client.new_order(identifier) order_list.append(order) ``` 9. 针对每个域名,获取 ACME 服务器返回的 DNS 验证信息: ```python for order in order_list: authorizations = client.fetch_authorizations(order) for authz in authorizations: if authz.body.identifier.typ == messages.IDENTIFIER_FQDN: domain = authz.body.identifier.value dns_challenge = None for i in authz.body.challenges: if isinstance(i.chall, messages.DNS01): dns_challenge = i break if dns_challenge is None: raise ValueError("No DNS challenge found for domain") token = jose_base64url_decode(dns_challenge.chall.token) key = jwk.JWK.load(private_key.public_key()) thumbprint = key.thumbprint() dns_value = thumbprint + '.' + token.decode() dns_record_name = '_acme-challenge.' + domain dns_record_value = dns_value.decode() print(f"Please add the following DNS record to your domain:") print(f"- Name:\t{dns_record_name}") print(f"- Type:\tTXT") print(f"- Value:\t{dns_record_value}") ``` 10. 在 DNS 解析器中添加 TXT 记录,等待 DNS 记录生效: ```bash _acme-challenge.example.com. 3600 IN TXT "thumbprint.token" _acme-challenge.www.example.com. 3600 IN TXT "thumbprint.token" ``` 11. 等待 DNS 记录生效后,调用 `answer_challenge` 方法完成 DNS 验证: ```python for order in order_list: authorizations = client.fetch_authorizations(order) for authz in authorizations: if authz.body.identifier.typ == messages.IDENTIFIER_FQDN: domain = authz.body.identifier.value dns_challenge = None for i in authz.body.challenges: if isinstance(i.chall, messages.DNS01): dns_challenge = i break if dns_challenge is None: raise ValueError("No DNS challenge found for domain") response, validation = client.answer_challenge(dns_challenge, "dns-01") print(f"Domain {domain} validated!") ``` 12. 如果验证成功,ACME 服务器将会返回证书签名请求(CSR)和证书链: ```python for order in order_list: certificate_request, final_order = client.finalize_order( order, csr_pem=None) certificate_url = final_order.body.certificate certificate_pem = client.fetch_certificate(certificate_url).body ``` 13. 将证书和私钥保存到文件中: ```python with open('cert.pem', 'wb') as f: f.write(certificate_pem) with open('key.pem', 'wb') as f: f.write(private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption(), )) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

carefree798

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值