Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查看域是否使用DNSSEC_Python_Security_Dns - Fatal编程技术网

Python 如何查看域是否使用DNSSEC

Python 如何查看域是否使用DNSSEC,python,security,dns,Python,Security,Dns,我正在试图找到一种方法来查看域是否正在使用DNSSEC。从这条线索中:我学到了这一点 dig +dnssec <domain> dnskey dig+dnssec dnskey 可以揭示很多事情。但是经过一些实验,我意识到它只显示名称服务器是否使用DNSSEC设置。我需要弄清楚的是,域是否标记为在NIC上使用DNSSEC 我试着看一下dnssec for python,但它们似乎都是看名称服务器,而不是原来的NICzone 在深入研究之后,我注意到一些NIC(如sidnl.nl)

我正在试图找到一种方法来查看域是否正在使用DNSSEC。从这条线索中:我学到了这一点

dig +dnssec <domain> dnskey
dig+dnssec dnskey
可以揭示很多事情。但是经过一些实验,我意识到它只显示名称服务器是否使用DNSSEC设置。我需要弄清楚的是,域是否标记为在NIC上使用DNSSEC

我试着看一下dnssec for python,但它们似乎都是看名称服务器,而不是原来的NICzone

在深入研究之后,我注意到一些NIC(如sidnl.nl)在WHOIS数据中对其进行了记录,但由于这并不可靠(并非所有NIC都这样做),我正在寻找更好的方法


ANSER不必是编程的/使用代码片段,但如果是的话,如果是python/C#/java或其他一些语法简单易懂的语言,我会很高兴的;博士 诊断起来非常困难,不要自己做,不要认为一个DNS查询或whois输出就能真正完全回答这个问题,它更复杂

如果您信任他们,以下工具将非常有用,使生活更简单:

  • 正如很久以前在另一份答复中所报道的那样
  • 基于特定查询的DNS层次结构的非常好的显示,带有
  • 通用区域检查器
至少最后两个也是可以在本地下载和安装的软件,以进行相同的测试;您还有
dig
,或DNSSEC的后续版本
delv
(见下文),并且
unbound
为等效功能集提供了
drill
实用程序

“我需要弄清楚域是否在NIC上标记为使用DNSSEC。” 这与你的问题无关,或者基于以下问题措辞不当

whois输出中所写的内容并不有用:它有时确实可以显示
DNSSEC:Yes
或其他等效内容,但whois和DNS是两个独立的东西,如果您想解决DNS问题,您应该留在DNS领域,所以现在让我们忽略whois

回到
dig+dnssec dnskey
,这是一个很好的方向,但从两个大问题开始:

  • 您使用的是
    dig
    ,而没有使用
    @
    指定查询的名称服务器。因此,您将得到的答复将来自某个递归名称服务器,您可以控制它,也可以不控制它,它可能对您撒谎,它通向您的路径可能受控制,也可能不受控制,在后一种情况下,答案可以在传输过程中修改;要解决这一点,实际上您需要查询域的一个权威名称服务器,因此您首先需要找到它们;这可能会变得复杂,因为您需要使用DNSSEC来确保在所有查询中获得有效的答复,同时DNSSEC中的任何错误都会将
    SERVFAIL
    作为答复
  • 第二个大问题是,基本上您的查询将显示某些DNSKEY是否与区域数据一起发布,以及任何签名,但:
  • 它不能确保您请求的递归解析器验证了任何内容(因此签名可能都是伪造的),因为要做到这一点,您需要
    +nocdflag
    而不是
    +dnssec
    (触发签名的显示,即
    RRSIG
    记录)
    +cdflag
    实际上是一个禁用验证的标志,因此您需要将其反转(因为默认情况下解析程序可能会进行验证,在这种情况下,比较
    dig
    dig+cd
    结果可以帮助解释观察到的错误是否与DNSSEC相关)(所有DNSSEC故障当前仅返回
    SERVFAIL
    ,这是一种通用错误代码,在与DNSSEC无关的无数其他情况下可能会出现此错误代码;)
  • 最后,即使所有内容都在此处单击,最终域发布了一个
    DNSKEY
    这一事实并不意味着它启用了DNSSEC,因为要使其工作,它必须有一个
    DS
    记录匹配该特定项,但已发布在父权威名称服务器(即注册表的名称服务器)上ut这样的记录(其签名本身带有一个已发布的密钥,并且它本身与另一个
    DS
    相对应,记录更高一级,以此类推,直到DNS根),即使发布了
    DNSKEY
    ,它也永远不会被信任,因此域实际上没有DNSSEC
  • 像解析器一样进行验证 因此,要从头开始并正确地执行所有操作,您需要做的是做递归验证名称服务器将要做的事情:它将DNSSEC验证您的域(或失败)。这是唯一证明域已启用DNSSEC的测试,因为这意味着域已发布所需内容,父域也发布所需内容,依此类推

    当然,在您这边手动重做这一切是个坏主意,因为DNSSEC验证非常复杂

    您将要做的是,安装一个本地验证解析器(如
    unbound
    ),或者使用一个库(如
    getdns
    ),它将为您解决所有这些问题,或者您使用一个远程递归名称服务器为您验证DNSSEC,前提是您完全信任相关的名称服务器和所有e您和it之间的网络路径(或者您现在使用DoH或DoT将DNS交换打包成TLS流)。 因为如果您使用的远程服务器不可信,它可能会在DNSSEC验证结果方面对您撒谎,如果您信任名称服务器而不信任网络路径,那么活动攻击者可以在结果从递归名称服务器传来之前对其进行修改

    请注意,bind的最新版本提供了
    delv
    ,它是
    dig
    的后续版本,专门用于DNSSEC相关的故障排除:

    Bind9.10包含一个新的调试工具,它是dig的继承者