当前位置: 首页 > 面试题库 >

以编程方式检查域是否受DNSSEC保护

程树
2023-03-14
问题内容

如标题所述,我想以编程方式检查域的DNS响应是否受DNSSEC保护。
我该怎么办?

如果有Pythonic解决方案,那就太好了。

更新:更改了响应请求,对于您的困惑感到抱歉


问题答案:

使用DNS解析器(例如dnspython),您可以查询域的DNSKEY RRset并打开DO(dnssec
OK)查询标志。如果查询成功,则答案将设置AD(已认证数据)标志,并将包含区域的RRSIG签名(如果已签名)。

更新:使用的基本示例 dnspython

import dns.name
import dns.query
import dns.dnssec
import dns.message
import dns.resolver
import dns.rdatatype

# get nameservers for target domain
response = dns.resolver.query('example.com.',dns.rdatatype.NS)

# we'll use the first nameserver in this example
nsname = response.rrset[0].to_text() # name
response = dns.resolver.query(nsname,dns.rdatatype.A)
nsaddr = response.rrset[0].to_text() # IPv4

# get DNSKEY for zone
request = dns.message.make_query('example.com.',
                                 dns.rdatatype.DNSKEY,
                                 want_dnssec=True)

# send the query
response = dns.query.udp(request,nsaddr)
if response.rcode() != 0:
    # HANDLE QUERY FAILED (SERVER ERROR OR NO DNSKEY RECORD)

# answer should contain two RRSET: DNSKEY and RRSIG(DNSKEY)
answer = response.answer
if len(answer) != 2:
    # SOMETHING WENT WRONG

# the DNSKEY should be self signed, validate it
name = dns.name.from_text('example.com.')
try:
    dns.dnssec.validate(answer[0],answer[1],{name:answer[0]})
except dns.dnssec.ValidationFailure:
    # BE SUSPICIOUS
else:
    # WE'RE GOOD, THERE'S A VALID DNSSEC SELF-SIGNED KEY FOR example.com


 类似资料:
  • 问题内容: 如何检查Glassfish DAS是否以编程方式运行,即使已将其部署在本地计算机还是远程计算机上? 使用Java6 问题答案: 我找到了一种方法来检查DAS是否已启动,而不是Linux脚本。通过这种方式,我的应用程序和DAS都在同一台计算机上还是每台安装在不同的计算机上都没有关系。 }

  • 问题内容: 我正在尝试使用iText的PdfReader来检查给定的PDF文件是否受密码保护,但是却遇到此异常: 线程“主线程”中的异常java.lang.NoClassDefFoundError:org / bouncycastle / asn1 / ASN1OctetString 但是,当针对非密码保护的文件测试相同的代码时,它运行良好。这是完整的代码: 问题答案: 从此处使用Apache P

  • 问题内容: 我正在做一个项目,我们在Java服务和以其他各种语言编写的客户端之间进行大量的远程对象传输。考虑到我们当前的限制,我决定查看基于现有Java类生成代码所需要的内容。基本上,我需要获取一个文件(或它们的集合)来解析字节码,以确定所有数据成员,甚至可能是getter / setter,然后编写一些可以输出不同语言代码的内容,以创建具有相同结构的类。 我不是在寻找像JAD这样的标准反编译器。

  • 问题内容: 我正在使用Go应用程序,该应用程序使用Go Docker SDK启动一些Docker容器。我需要检查容器的进程是否以零(成功)状态代码退出。 这是最小的工作示例: 如您所见,容器中的进程以非零状态()结尾。但是,它不会记录任何致命错误,只会在构建和执行时显示: 如何使用Docker Go SDK检查以非零状态退出的容器进程? 问题答案: 我认为您应该使用状态通道来获取退出代码。错误通道

  • 如果当前请求是安全的,有没有办法“询问”Spring Security性?因为即使我通过了身份验证,我也要检测我是在受安全保护的URL中还是在匿名/公共页面中 提前感谢!

  • 我们以编程方式安装了应用程序。 如果应用程序已安装在设备中,则应用程序将自动打开。 指引我。我完全不知道。谢谢。